C++;向量实例变量 我对C++比较陌生,我遇到了一个我无法解决的问题。我得到的确切错误是:
Pg1_raycast_nabrown3.exe中0x760d34c5处的首次机会异常: 0xC0000005:访问冲突读取位置0x0e296575。未处理 Pg1_raycast_nabrown3.exe中0x760d34c5处出现异常:0xC0000005: 访问冲突读取位置0x0e296575 当我尝试访问向量实例变量时,会产生这些变量。代码如下: 组.hC++;向量实例变量 我对C++比较陌生,我遇到了一个我无法解决的问题。我得到的确切错误是:,c++,stdvector,C++,Stdvector,Pg1_raycast_nabrown3.exe中0x760d34c5处的首次机会异常: 0xC0000005:访问冲突读取位置0x0e296575。未处理 Pg1_raycast_nabrown3.exe中0x760d34c5处出现异常:0xC0000005: 访问冲突读取位置0x0e296575 当我尝试访问向量实例变量时,会产生这些变量。代码如下: 组.h class Group { private: string name; vector<Face*> me
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();
};
debug语句只打印出一个“a”,因此它会在第一个members.size()调用时崩溃。addFace()函数是从另一个类调用的,但我认为这与代码无关。没有其他东西与成员向量交互
非常感谢您的帮助
编辑:
显然,我调试语句的尝试导致了更多的问题。我想指出的是,即使删除您指出为错误的调试语句,我仍然会收到原始错误
void Group::addFace(Face* f) {
// DEBUGGING
OutputDebugStringA("A\n");
members.push_back(f);
// DEBUGGING
OutputDebugStringA("B\n");
}
不能在C++中像这样连接字符串。代码>“A”+members.size()是无效的指针算术
您应该从“A”
创建std::string
,并将成员.size()
转换为std::string
,因此此行应该如下所示:
OutputDebugString((std::string("A ") + std::to_string(members.size())).c_str());
您需要<代码>包含< /代码>,以便工作。 您不能在C++中像这样连接字符串。代码>“A”+members.size()是无效的指针算术 您应该从
“A”
创建std::string
,并将成员.size()
转换为std::string
,因此此行应该如下所示:
OutputDebugString((std::string("A ") + std::to_string(members.size())).c_str());
您需要
#包括,这样才能工作。resize()
如果向量需要增长,则向其添加新的默认构造对象。您可能需要使用reserve()
。问题是否与OutputDebugString
有关?members.size()
的结果不是string
或字符串文字,而是一个整数值,因此“a”+members.size()
可能会导致奇怪的行为。更喜欢像“A”+std::to_string(members.size())
这样的东西,您不需要使用成员。如果需要,调整大小、向后推将重新分配向量。向后推将根据需要增加向量,因此,addFace
中的几乎所有代码似乎都不是必需的。请尝试在调试器中运行,看看您得到了什么样的回溯。我的猜测是,您正在对无效的组指针调用addFace,但我们无法从您发布的代码中捕捉到这一点。resize()
在向量需要增长时向其添加新的默认构造对象。您可能需要使用reserve()
。问题是否与OutputDebugString
有关?members.size()
的结果不是string
或字符串文字,而是一个整数值,因此“a”+members.size()
可能会导致奇怪的行为。更喜欢像“A”+std::to_string(members.size())
这样的东西,您不需要使用成员。如果需要,调整大小、向后推将重新分配向量。向后推将根据需要增加向量,因此,addFace
中的几乎所有代码似乎都不是必需的。请尝试在调试器中运行,看看您得到了什么样的回溯。我猜您是在无效的组指针上调用addFace,但是我们无法从您发布的代码中捕捉到这一点OutputDebugString
不会接受std::string
作为参数,尽管您的其他观点是正确的。正确的用法应该是OutputDebugString((std::string(“A”)+std::to_string(members.size()).c_str())代码>好的捕获。更新了我的答案。感谢幸运的是,我无法使用to_string,因为它总是导致“错误:重载函数的多次实例”。OutputDebugString
不会接受std::string
作为参数,尽管您的其他观点是正确的。正确的用法应该是OutputDebugString((std::string(“A”)+std::to_string(members.size()).c_str())代码>好的捕获。更新了我的答案。感谢幸运的是,我无法使用to_字符串,因为它总是导致“错误:重载函数的多次实例”。