我对C++比较陌生,我遇到了一个我无法解决的问题.我得到的确切错误是:
Pg1_raycast_nabrown3.exe中0x760d34c5的第一次机会异常:0xC0000005:访问冲突读取位置0x0e296575.Pg1_raycast_nabrown3.exe中0x760d34c5处的未处理异常:0xC0000005:访问冲突读取位置0x0e296575.
当我尝试访问矢量实例变量时会产生这些.这是代码:
group.h
class Group {
private:
string name;
vector<Face*> members;
Material* material;
public:
Group(string n);
~Group();
void addFace(Face* f);
string getName();
vector<Face*> getMembers();
void setMaterial(Material * mat);
Material* getMaterial();
};
Run Code Online (Sandbox Code Playgroud)
group.cpp
// Constructor
Group::Group(string n) {
name = n;
}
// Deconstructor
Group::~Group() {}
/**
* addFace
*
* adds the provided face to this group
*/
void Group::addFace(Face* f) {
// DEBUGGING
OutputDebugStringA("A\n");
OutputDebugStringA("A " + members.size());
members.resize(members.size() + 1);
OutputDebugStringA("B\n");
OutputDebugStringA("B " + members.size());
members.push_back(f);
}
Run Code Online (Sandbox Code Playgroud)
调试语句只打印出单个"A",因此它会在第一个members.size()调用时崩溃.addFace()函数是从另一个类调用的,但我不认为这应该是相关的代码.没有其他任何东西与成员矢量相互作用.
任何帮助是极大的赞赏.
编辑: 显然,我对调试语句的尝试导致了更多问题.我想要注意的是,即使删除你指出错误的调试语句,我仍然会收到原始错误.
void Group::addFace(Face* f) {
// DEBUGGING
OutputDebugStringA("A\n");
members.push_back(f);
// DEBUGGING
OutputDebugStringA("B\n");
}
Run Code Online (Sandbox Code Playgroud)
你不能在c ++中连接类似的字符串."A " + members.size()是无效的指针算术.
您应该创建std::string自"A "和转换members.size()到std::string,所以这条线应该是这样的:
OutputDebugString((std::string("A ") + std::to_string(members.size())).c_str());
Run Code Online (Sandbox Code Playgroud)
你需要#include <string>为此工作.