带有内存错误访问的C++结构new

C++ struct new with memory bad access

本文关键字:C++ 结构 new 访问 内存 错误      更新时间:2023-10-16

我正在尝试从以下内容中创建节点。当我尝试out"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) {}
 };

AN下面一行是我收到错误"EXC_BAD_ACCESS(代码=1,地址=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成员,但同样,它不是指针,您可以从成员初始化列表中跳过它,默认构造函数将被调用,

  • 最后,如果您在C++11中,请避免使用NULL0或事件nullptr

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