황당한 code error
((case1))
class tetgenio { ... typedef struct { int *vertexlist; int numberofvertices; } polygon; <strong> typedef struct { polygon *polygonlist; int numberofpolygons; double *holelist; int numberofholes; } facet;</strong> ... };
((case2))
class tetgenio { ... typedef struct { int *vertexlist; int numberofvertices; } polygon; <strong> typedef struct { double *holelist; polygon *polygonlist; int numberofpolygons; int numberofholes; } facet;</strong> ... }; MStatus FXTetGen::compute( const MPlug& plug, MDataBlock& data ) { MStatus stat; tetgenio in; if( plug == outTemp ) { ... in.facetlist = new tetgenio::facet[numFaces]; ... } }
((case1))의 tetgenio.facet struct를 사용하게 되면, FXTetGen node의 output 출력에 문제가 생긴다.
((case2))의 tetgenio.facet struct 선언처럼,
double *holelist; → polygon *polygonlist; 순서로 써주어야 한다.
예전에도 한 번 이것과 비슷한 경우가 있었는데,
class의 멤버 변수 중에서
user defined data type (즉, 새로 정의한 struct나 class)의 포인터를 가질 경우
그 포인터가 가르치는 struct나 class의 크기 순서(작은 것부터 큰 것 순서)대로 써주지 않으면
예기치 못한 결과가 나타난다.
예전에 Visual C++ 6.0에서 비슷한 문제가 발생했었던 기억이 난다.
Visual Studio.NET 2005에서도 아직 이러한 문제가 남아 있는 것으로 보아
Microsoft Visual Studio의 문제만은 아닌 듯