我正在尝试创建以下节点。当我尝试使用“int data”时,我能够实例化一个新的struct成员,但是添加了另一个成员变量“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;
为什么我只有一个成员变量没有错误,但是我又做了一个成员成员变量?我错过了初始化的东西吗?我想我正在做上面的构造函数。请给我一些建议。
谢谢,
答案 0 :(得分:0)
struct node* root = new node(NULL);
调用explicit node(string name)
构造函数,这意味着您将NULL
传递给初始化string
会导致错误。如果你想构造一个空字符串传递""
。
struct node
{
string name;
int data;
vector<node*> neighbors;
explicit node(string name)
: name(name),
data(NULL), //ERROR, data is int type, not pointer
neighbors(NULL) //ERROR, not pointer
{}
explicit node(const std::string& name = "")
: data(0) // name,neighbors constructors are implicitly called
答案 1 :(得分:0)
这里有一些错误:
不要使用NULL初始化std::string
。如果您想要一个空的string
,请使用默认构造函数或""
,
当您致电struct node* root = new node(NULL);
时,您调用构造函数explicit node(string name)
并使用NULL初始化字符串会导致错误,
尽可能避免使用指针:struct node* root = new node();
- &gt; struct node root();
,
您使用data
初始化了NULL
成员,但这是integer
。您应该使用0
,
您使用neighbors
初始化NULL
成员,但同样,它不是指针,您可以从成员初始化列表中跳过它,将调用默认构造函数,
最后,如果您使用的是C ++ 11,请避免使用NULL
,使用0
或事件nullptr
。