Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新内存不正确的C++结构_C++_Memory Management_Memory Leaks_Struct_Nodes - Fatal编程技术网

新内存不正确的C++结构

新内存不正确的C++结构,c++,memory-management,memory-leaks,struct,nodes,C++,Memory Management,Memory Leaks,Struct,Nodes,我正在尝试从以下内容创建节点。当我尝试使用int数据时,我能够实例化一个新的结构成员,但是添加了另一个成员变量字符串名,由于某种原因,我得到了内存泄漏 struct node { string name; int data; vector<node*> neighbors; node(string name, int data, node* neighbor) { this->name =

我正在尝试从以下内容创建节点。当我尝试使用int数据时,我能够实例化一个新的结构成员,但是添加了另一个成员变量字符串名,由于某种原因,我得到了内存泄漏

 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) {}
 };
为什么我只有一个成员变量没有错误,但我又多了一个成员变量?我是否缺少初始化某些内容?我想我是在和上面的建设者打交道。请给我一些建议

谢谢

struct node* root = new node(NULL);
调用显式nodestring名称构造函数,这意味着您传递NULL以初始化字符串,从而导致错误。如果要构造空字符串传递


这里有一些错误:

不要用NULL初始化std::string。如果需要空字符串,请使用默认构造函数或

调用struct node*root=new nodeNULL时;调用构造函数显式nodestring name并用NULL初始化字符串会导致错误

尽可能避免使用指针:结构节点*根=新节点;->结构节点根

您使用NULL初始化数据成员,但这是一个整数。您应该用0初始化它

您使用NULL初始化邻居成员,但同样,它不是指针,您可以从成员初始化列表中跳过它,将调用默认构造函数

最后,如果您在C++11中,请避免使用NULL、0或event nullptr


这是非常错误的,请避免使用指针,不要用NULL初始化std::string。避免NULL,使用0或更好的nullptr,但不要初始化std::string@dfsadxsadqwd213 np,很高兴它有帮助!
struct node* root = new node(NULL);
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