使用指针时ntdll!RtlpMuiRegFreeRegistryInfo()和SIGSEGV

时间:2016-01-26 17:20:26

标签: c++

当我使用指针时,我的代码出错了。当我创建两个对象然后使用这样的方法时,一切都很好:

Insect* insect;
Leaf leaf;
leaf.affect(insect);

(到目前为止,影响方法除了打印一些文字外什么也没做) 但是当我把它变成:

Insect* insect;
Leaf* leaf;
leaf->affect(insect);

我在调试器中得到了SIGSEGV和ntdll!RtlpMuiRegFreeRegistryInfo()。这是什么意思?

1 个答案:

答案 0 :(得分:2)

Leaf leaf;

创建作为自动对象存在的Leaf。然后,您可以在其上调用成员函数,因为您有一个有效的对象。

Leaf* leaf;

创建指向Leaf的指针,它指向一些垃圾位置。当您尝试使用该垃圾指针时,您有undefined behavior,在本例中为SIGSEGV。

为了使第二种情况起作用,你需要为它分配内存,如

Leaf* leaf = new Leaf;

不要忘记,如果您使用new / new[],那么当您完成指针返回时,您需要调用delete / delete[]存储器中。