我真的对这个问题感到疯狂,我已经尝试了所有的东西,到处搜索我的问题,而且我不想把头发拉出去秃头。我有一个.obj
文件解析器,它曾经工作过,但它已经不复存在了,我不知道为什么。 codeblocks
附带的调试器对我发现这个问题的根源没有任何帮助,我已经尝试了所有我知道的答案。重要部分如下:
while (1) {
if ( strcmp( lineHeader, "f" ) == 0 ) {
int vertIndex[3];
int vertUVIndex[3];
int normalIndex[3];
int matches = fscanf( file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", &vertIndex[0], &vertUVIndex[0], &normalIndex[0],
&vertIndex[1], &vertUVIndex[1], &normalIndex[1],
&vertIndex[2], &vertUVIndex[2], &normalIndex[2]);
tris.push_back(new Tri()); // tris is a std::vector<Tri*> this is the problem line
tris[tris.size()-1]->vertIndex[0] = vertIndex[0]-1;
tris[tris.size()-1]->vertIndex[1] = vertIndex[1]-1;
tris[tris.size()-1]->vertIndex[2] = vertIndex[2]-1;
tris[tris.size()-1]->texCoordIndex[0] = vertUVIndex[0]-1;
tris[tris.size()-1]->texCoordIndex[1] = vertUVIndex[1]-1;
tris[tris.size()-1]->texCoordIndex[2] = vertUVIndex[2]-1;
}
}
三级课程如下:
class Tri {
public:
unsigned short dotProd;
float normal[3];
unsigned short texCoordIndex[3];
unsigned short vertIndex[3];
Tri(){}
};
我已经搜索了高低的答案,但我不知道为什么它会崩溃。
编辑1:所以我看了一下调用堆栈,因为它似乎是我答案的最后一个地方,在深入研究它之后,我注意到了这一点:
std::vector<Tri*,std::allocator<Tri*>>::push_back(Tri*&&)(this=0x96f8f0,_x=<unknown type in (exefilelocation), CU 0x750a1, DIE 0x86cce>)
现在,未知类型的部分看起来很奇怪,但我不知道这是不是坏,因为它是一个类而不是标准数据类型。
我想我也应该包含所需的行为,这将存储我在矢量内部制作的三角形而不会导致程序崩溃。我也摆脱了无关的代码。