具有内存错误访问的 C++ struct new

标签 c++ memory-management memory-leaks struct nodes

我正在尝试使用以下内容创建节点。当我尝试使用“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/

相关文章:

java - 在Java中如何将 "block of memory"与 "objects"联系起来?

f# - 递归序列会泄漏内存吗?

c++ - 如何将 QMap<QString, QMap<QString, int>> 转换为 QVariant?

c++ - GDB 以无序的方式跳到错误的行

c++ - 如何将哈希表存储在文件中?

java - 在方法内部创建的对象

c# - 为什么程序集的调用会占用如此多的 RAM?

c - malloc 是否需要操作系统支持?

c++ - 清除指针 vector

c++ - 为模板特化提供*隐式*转换运算符