c++ - OpenGL 中的访问冲突

标签 c++ opengl assimp

我正在尝试验证我的 vector 是否填充了一些数据,但是当我尝试打印字符串时,程序给出了“访问冲突读取位置 0x00000010”错误。

这是我的代码:

for (unsigned int i = 0; i < mMeshes.size(); ++i) {
        InitMesh(i, mScene->mMeshes[i], Positions, TexCoords, Normals, VertexBones, Indices);
    }

    std::cout << mBones[mBoneMap["forearm.L"]].Name << "\n";

它在 cout 处停止。这是我的 InitMesh 函数,从中正确执行了 cout:

for (unsigned int i = 0; i < pMesh->mNumBones; ++i) {
    std::string BoneName = pMesh->mBones[i]->mName.data;
    int BoneIndex = 0;

    if (mBoneMap.find(BoneName) == mBoneMap.end()) {
        BoneIndex = mNumBones;
        mNumBones++;
        BoneInfo bi;
        mBones.push_back(bi);
    }
    else {
        BoneIndex = mBoneMap[BoneName];
    }

    mBoneMap[BoneName] = BoneIndex;
    mBones[BoneIndex].Name = BoneName;
    std::cout << mBones[i].Name << "\n";
    AiToGLM(pMesh->mBones[i]->mOffsetMatrix, mBones[BoneIndex].OffsetTransform);

    for (unsigned int j = 0; j < pMesh->mBones[i]->mNumWeights; ++j) {
        unsigned int VertexID = mMeshes[MeshIndex].BaseVertex + pMesh->mBones[i]->mWeights[j].mVertexId;
        VertexBones.at(VertexID).Add(i, pMesh->mBones[i]->mWeights[j].mWeight);
    }
}

BoneInfo 是一个包含两个矩阵和一个名为 Name 的字符串的结构。保存 BoneInfos 的 vector 在头文件中:

struct BoneInfo {
std::string Name;
glm::mat4 OffsetTransform;
glm::mat4 FinalTransform;};

private:
    std::vector<BoneInfo> mBones;
    std::map<std::string, int> mBoneMap;
    int mNumBones = 0;

最佳答案

我没有发现这段代码有什么特别的错误。不幸的是,当在 C++ 中你在给定的行中遇到段错误时,这并不意味着该行做错了什么,因为问题可能已经发生在数百万条已执行的指令之前,而哭泣的只是发现其数据已损坏的受害者。

在这种情况下,打印字符串时出现内存读取错误意味着字符串内存已被某人覆盖。我的经验表明,这可能是由于数组的越界访问而发生的,或者因为已经被销毁的对象再次被使用,因为有一个指针仍然指向它(或者因为你正在打印一个数据结构当然,已经被释放了)。

您应该尝试使用标准库的调试版本重新编译,该版本检查每个数组取消引用,并且还添加大量内存检查以查找释放后写入错误。该程序运行起来会很慢,但可能会让您找到破坏内存的真正错误代码。

关于c++ - OpenGL 中的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33384171/

相关文章:

c++ - 向心 Catmull-Rom 样条如何工作?

c++ - 带有指针 vector 的 glbufferdata C++

c++ - 导入 .obj 时出现 Assimp Unhandled Exception

c++ - 将指针复制到 aiScene

c++ - 如何让 AssImp 正常工作?

c++ - 我究竟做错了什么? (C++ 字符串)

c++ - 视觉口齿不清 : how to call functions in external C++ DLL

c++ - Objective-C 协议(protocol)委托(delegate)不工作

c++ - HTTP 状态码到 HRESULT 的映射

c++ - OpenGL 旋转问题