c ++删除链接列表不能正常进行

时间:2015-07-06 19:40:08

标签: c++

我有以下链表结构

struct MyClass {
      int i;
      string str;
      uint64_t address;
    };

主要是

int main () {  
  MyClass * pt;  

  pt = new MyClass;  
 pt->i = 10;  
pt->str = "test";  
pt->address = 2343233233;  
  delete pt;

  return 0;  
}

问题是,删除pt后,这是我得到的结果。

i = 323322;  
str = "";  
address = 2343233233;

变量i有垃圾值,str为空且地址保持不变。有人知道为什么会这样,怎么解决?提前谢谢。

1 个答案:

答案 0 :(得分:3)

没有解决这个问题,因为没有错误(*)。

您为类的实例分配一块内存,在那里设置一些值,然后释放该内存。

调用delete pt;后,指针pt指向的地址不再用于您,写入甚至从那里读取可能会导致未定义的行为。理论上,该程序可以发送忍者来杀死你。在实践中,大多数情况下,您只是访问相同的内存位置,只有使用它才会导致灾难性故障。

您看到的内容最有可能是内存分配器在释放后执行的内部记录更改。

最后一点:我真的不知道你在哪里见过这个,但是你的班级绝对不是你应该如何实现一个链表:

struct listnode {
  // some data
  listnode * next;
  // better: std::unique_ptr<listnode> next;
  // or with sharing: std::shared_ptr<listnode> next;
};

指针的原因。

(*)澄清:没有错误,因为程序显示了一种未定义的行为形式,这正是它应该以这种形式做的事情(删除后解除引用) )。