我正在尝试使用以下内容创建节点。当我尝试使用“int data”时,我能够实例化一个新的结构成员,但添加了另一个成员变量“string name”,由于某种原因,我遇到了内存泄漏。
struct node
{
string name;
int data;
vector<node*> neighbors;
node(string name, int data, node* neighbor)
{
this->name = name;
this->data = data;
neighbors.push_back(neighbor);
}
explicit node()
: name(NULL), data(NULL), neighbors(NULL) {}
explicit node(string name)
: name(name), data(NULL), neighbors(NULL) {}
};
下面一行是我收到错误“EXC_BAD_ACCESS (code=1, address=0x0”)
int main() {
struct node* root = new node(NULL);
root->name = "root";
root->data = 10;
为什么我只有一个成员变量没有错误,但是我多了一个成员变量呢?我是否缺少初始化某些东西?我想我正在使用上面的构造函数。请给我一些建议。
谢谢,
最佳答案
这里有一些错误:
不要用 NULL 初始化
std::string
。如果你想要一个空的string
,使用默认的构造函数或者""
,当您调用
struct node* root = new node(NULL);
时,您会调用构造函数explicit node(string name)
并使用 NULL 初始化一个字符串导致错误,尽可能避免使用指针:
struct node* root = new node();
->struct node root();
,您使用
NULL
初始化您的data
成员,但这是一个integer
。你应该用0
, 初始化它
您使用
NULL
初始化您的neighbors
成员,但同样,它不是指针,您可以从 member-initialization- 中跳过它list,将调用默认构造函数,最后,避免使用
NULL
,如果您使用的是 C++11,请使用0
或事件nullptr
。
关于具有内存错误访问的 C++ struct new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418729/