我在我的应用程序中获得segmentation fault
,并且在使用示例应用程序进行测试时,发现该对象引用释放它之后不会导致分段错误。下面是测试代码,我跑,为什么没有segfault错误时免费重新对象?
hash_node *node_obj=new hash_node();
delete node_obj;
node_obj->var1=0;
return 0;
我只是重载new
使用malloc
和delete
使用free
。 任何人都可以在这里告诉我吗?
我在我的应用程序中获得segmentation fault
,并且在使用示例应用程序进行测试时,发现该对象引用释放它之后不会导致分段错误。下面是测试代码,我跑,为什么没有segfault错误时免费重新对象?
hash_node *node_obj=new hash_node();
delete node_obj;
node_obj->var1=0;
return 0;
我只是重载new
使用malloc
和delete
使用free
。 任何人都可以在这里告诉我吗?
使用已被删除/释放的指针访问内存中的位置是未定义的行为。未定义的行为并不意味着会发生段错误。
这是一个未定义的行为,所以你不能指望在这里出现分段错误。您可以参考Stroustrup的“C++的设计和演变”,其中提到:
初始化后无法更改引用所引用的内容。也就是说,一旦C++引用被初始化,它就不能被 指向一个不同的对象;它不能被重新绑定。根据rg2的类型,其中r1 = r2可以通过r1分配给所参考的对象或向r1分配新的 参考值(重新绑定r1)。我想在C++中避免出现这样的问题。
当进程试图访问它不认为的内存位置时,会发生分段错误。分配给进程的区域之外的内存。
在您的代码中,访问已释放的内存是未定义的行为。