2010-07-16 04:10 AM - last edited on 2023-08-03 11:31 AM by Doreena Deng
Geometry::Init(); HalfPlane2DData cutline1, cutline2; BNZeroMemory(&cutline1, sizeof(HalfPlane2DData)); BNZeroMemory(&cutline2, sizeof(HalfPlane2DData)); cutline2.ca = cutline1.ca = 1; cutline2.cb = cutline1.cb = 0; cutline1.cc = 1; cutline2.cc = 2; cutline1.sizeOfInhEdgeInfo = cutline2.sizeOfInhEdgeInfo = sizeof(long); Geometry::Polygon2DData polygon; long defaultVertexInfo = 0; long defaultInhEdgeInfo = 0; long defaultUniqEdgeInfo = 0; long defaultContourInfo = 0; long defaultUniqPolygonInfo = 0; Geometry::InitPolygon2DData (&polygon, sizeof (long), reinterpret_cast<GSPtr> (&defaultVertexInfo), // vertex informations sizeof (long), reinterpret_cast<GSPtr> (&defaultInhEdgeInfo), // edge informations sizeof (long), reinterpret_cast<GSPtr> (&defaultUniqEdgeInfo), // edge informations sizeof (long), reinterpret_cast<GSPtr> (&defaultContourInfo), // contour informations sizeof (long), sizeof (long), reinterpret_cast<GSPtr> (&defaultUniqPolygonInfo)); // polyogn informations polygon.nContours = 1; polygon.contourEnds = reinterpret_cast<UIndex**> (BMhAll ((polygon.nContours+1) * sizeof (UIndex))); polygon.contourInfos = BMhAll ((polygon.nContours+1) * sizeof (long)); (*polygon.contourEnds)[0] = 0; // not used, must be zero reinterpret_cast<long*>(*polygon.contourInfos)[0] = 'C-uu'; (*polygon.contourEnds)[1] = 5; // index of the last vertex in the first (main) contour reinterpret_cast<long*>(*polygon.contourInfos)[1] = 'C-01'; polygon.nVertices = 5; // first vertices of contours is duplicated in the last (but do not count the unused) polygon.vertices = reinterpret_cast<Coord**> (BMhAll ((polygon.nVertices + 1) * sizeof (Coord))); polygon.vertexInfos = BMhAll ((polygon.nVertices + 1) * sizeof (long)); polygon.inhEdgeInfos = BMhAll ((polygon.nVertices + 1) * sizeof (long)); polygon.uniqEdgeInfos = BMhAll ((polygon.nVertices + 1) * sizeof (long)); (*polygon.vertices)[0] = Geometry::SetCoord ( 0.0, 0.0); // not used, must be zero reinterpret_cast<long*>(*polygon.vertexInfos)[0] = 'V-uu'; reinterpret_cast<long*>(*polygon.inhEdgeInfos)[0] = 'I-uu'; reinterpret_cast<long*>(*polygon.uniqEdgeInfos)[0] = 'U-uu'; (*polygon.vertices)[1] = Geometry::SetCoord (0, 0); reinterpret_cast<long*>(*polygon.vertexInfos)[1] = 'V-01'; reinterpret_cast<long*>(*polygon.inhEdgeInfos)[1] = 'I-01'; reinterpret_cast<long*>(*polygon.uniqEdgeInfos)[1] = 'U-01'; (*polygon.vertices)[2] = Geometry::SetCoord (3, 0); reinterpret_cast<long*>(*polygon.vertexInfos)[2] = 'V-02'; reinterpret_cast<long*>(*polygon.inhEdgeInfos)[2] = 'I-02'; reinterpret_cast<long*>(*polygon.uniqEdgeInfos)[2] = 'U-02'; (*polygon.vertices)[3] = Geometry::SetCoord (3, 2); reinterpret_cast<long*>(*polygon.vertexInfos)[3] = 'V-03'; reinterpret_cast<long*>(*polygon.inhEdgeInfos)[3] = 'I-03'; reinterpret_cast<long*>(*polygon.uniqEdgeInfos)[3] = 'U-03'; (*polygon.vertices)[4] = Geometry::SetCoord (0, 2); reinterpret_cast<long*>(*polygon.vertexInfos)[4] = 'V-04'; reinterpret_cast<long*>(*polygon.inhEdgeInfos)[4] = 'I-04'; reinterpret_cast<long*>(*polygon.uniqEdgeInfos)[4] = 'U-04'; (*polygon.vertices)[5] = Geometry::SetCoord (0, 0); reinterpret_cast<long*>(*polygon.vertexInfos)[5] = 'V-05'; reinterpret_cast<long*>(*polygon.inhEdgeInfos)[5] = 'I-05'; reinterpret_cast<long*>(*polygon.uniqEdgeInfos)[5] = 'U-05'; polygon.nArcs = 0; GSErr gserr = Geometry::ValidatePolygon2DData (&polygon); // Check for safety gserr = Geometry::CheckPolygon2DDataIntegrity (polygon); GS::VAArray<Geometry::Polygon2DData> arPolygons; Int32 wrcode; bool bStat = Geometry::StripPolygon2D(&cutline1,&cutline2, &polygon, &arPolygons, &wrcode); // Clean-up gserr = Geometry::FreePolygon2DData (&polygon); Geometry::Free();
Action Log: 00 0x4C3FBFAC 0x7EF40001 0x34346D56 0x21965DF8 Exception code: C0000005 ACCESS_VIOLATION reading location: 00000000 Fault address: 78145478 01:00014478 MSVCR80.dll Registers: EAX:00000004 EBX:00000000 ECX:00000001 EDX:00000000 ESI:00000000 EDI:067FB0B0 CS:EIP:001B:78145478 SS:ESP:0023:0013DEB8 EBP:0013DEC0 DS:0023 ES:0023 FS:003B GS:0000 Flags:00010297 Floating point Registers: CTRL:027F STAT:0120 TAGS:FFFF CS:EIP:001B:4ECE7F3F DS:EDO:0023:0013DF10 Cr0NpxState:00000000 ST(0) = --------- EMPTY ---------- [0013FD30E1842010] [0] ST(1) = --------- EMPTY ---------- [8FEEEEEEEEF14000] [1] ST(2) = --------- EMPTY ---------- [8000000000000000] [2] ST(3) = --------- EMPTY ---------- [8FEEEEEEEEF14000] [3] ST(4) = --------- EMPTY ---------- [DFA978332BE29000] [4] ST(5) = --------- EMPTY ---------- [0000000000000000] [5] ST(6) = --------- EMPTY ---------- [9A15DD19337E7800] [6] ST(7) = --------- EMPTY ---------- [FF83BC80661B2800] [7] Disassembly (FAULT is at memmove + 344 bytes) 78145450 8B448EE8 mov eax,[esi+ecx*4-0x18] ds:4E104CEC=E88F4489 78145454 89448FE8 mov [edi+ecx*4-0x18],eax ds:4E104CEC=EC8E448B 78145458 8B448EEC mov eax,[esi+ecx*4-0x14] ds:4E104CEC=EC8F4489 7814545C 89448FEC mov [edi+ecx*4-0x14],eax ds:4E104CEC=F08E448B 78145460 8B448EF0 mov eax,[esi+ecx*4-0x10] ds:4E104CEC=F08F4489 78145464 89448FF0 mov [edi+ecx*4-0x10],eax ds:4E104CEC=F48E448B 78145468 8B448EF4 mov eax,[esi+ecx*4-0xC] ds:4E104CEC=F48F4489 7814546C 89448FF4 mov [edi+ecx*4-0xC],eax ds:4E104CEC=F88E448B 78145470 8B448EF8 mov eax,[esi+ecx*4-0x8] ds:4E104CEC=F88F4489 78145474 89448FF8 mov [edi+ecx*4-0x8],eax ds:4E104CEC=FC8E448B FAULT ->78145478 8B448EFC mov eax,[esi+ecx*4-0x4] ds:4E104CEC=FC8F4489 7814547C 89448FFC mov [edi+ecx*4-0x4],eax ds:4E104CEC=008D048D 78145480 8D048D00000000 lea eax,[00000000+ecx*4] ds:00000001=???????? 78145487 03F0 add esi,eax 78145489 03F8 add edi,eax 7814548B FF249594541478 ds:00000000=???????? jmp dword ptr [memmove+0x174 (78145494)+edx*4] 78145492 8BFF mov edi,edi 78145494 A4 movsb ds:00000000=?? es:067FB0B0=B8 78145495 54 push esp 78145496 1478 adc al,0x78 78145498 AC lodsb ds:00000000=?? 78145499 54 push esp Call stack: 0x78145478!MSVCR80.dll + 87160 (memmove + 344 bytes) 0x4E05FDB3!GSRoot.dll + 64947 (BNCopyMemory + 24 bytes) 0x4ECE05FF!Geometry.dll + 132607 (Geometry::GetCurve2DDataEndDirection + 13429 bytes) 0x4ECE0FCE!Geometry.dll + 135118 (Geometry::GetCurve2DDataEndDirection + 15940 bytes) 0x4ECE1147!Geometry.dll + 135495 (Geometry::StripPolygon2D + 70 bytes)
2010-07-16 06:58 PM
wcyoot wrote:It's difficult to say from the crash report alone. Can you post the essentials of the code that created the polygon, leading up to the point where it crashes?
when executing Geometry::StripPolygon2D(&cutline1,&cutline2, &polygon, &arPolygons, &wrcode), it crashed! Why?
2010-07-19 10:06 AM
2010-07-19 10:09 AM
2010-07-19 10:46 AM
wcyoot wrote:Where?
I have post the code.
2010-07-19 12:06 PM
wcyoot wrote:I notice that you set
However when executing Geometry::StripPolygon2D(&cutline1,&cutline2, &polygon, &arPolygons, &wrcode), it crashed! Why?HalfPlane2DData cutline1, cutline2; cutline1.sizeOfInhEdgeInfo = cutline2.sizeOfInhEdgeInfo = sizeof(long);
2010-07-19 02:10 PM
2010-07-19 09:13 PM
wcyoot wrote:Unfortunately, no. I don't use any of these methods or classes because:
Oh,I have no idea about how to set the HalfPlane2DData. there is no example. Can you tell me ?
2010-07-20 07:00 AM