在指针向量上调用push_back时崩溃

时间:2017-01-26 23:25:59

标签: c++

我真的对这个问题感到疯狂,我已经尝试了所有的东西,到处搜索我的问题,而且我不想把头发拉出去秃头。我有一个.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>)

现在,未知类型的部分看起来很奇怪,但我不知道这是不是坏,因为它是一个类而不是标准数据类型。

我想我也应该包含所需的行为,这将存储我在矢量内部制作的三角形而不会导致程序崩溃。我也摆脱了无关的代码。

0 个答案:

没有答案