使用指针时,我的代码有错误。当我创建两个对象然后使用如下方法时,一切正常:

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


(到目前为止,fect方法只输出一些文本)
但是当我将其更改为:

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


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

最佳答案

Leaf leaf;


创建作为自动对象存在的Leaf。然后,您可以在具有有效对象的情况下对其调用成员函数。

Leaf* leaf;


创建一个指向Leaf的指针,它指向某个垃圾位置。当您尝试使用该垃圾指针时,您具有undefined behavior,在这种情况下为SIGSEGV。

为了使第二种情况起作用,您需要为其分配内存,例如

Leaf* leaf = new Leaf;


不要忘记,如果使用new / new[],则在完成返回指针的指针操作后需要调用delete / delete[]

关于c++ - 使用指针时ntdll!RtlpMuiRegFreeRegistryInfo()和SIGSEGV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35019872/

10-10 06:03