当我使用指针时,我的代码出错了。当我创建两个对象然后使用这样的方法时,一切都很好:
Insect* insect;
Leaf leaf;
leaf.affect(insect);
(到目前为止,影响方法除了打印一些文字外什么也没做) 但是当我把它变成:
Insect* insect;
Leaf* leaf;
leaf->affect(insect);
我在调试器中得到了SIGSEGV和ntdll!RtlpMuiRegFreeRegistryInfo()
。这是什么意思?
答案 0 :(得分:2)
Leaf leaf;
创建作为自动对象存在的Leaf
。然后,您可以在其上调用成员函数,因为您有一个有效的对象。
Leaf* leaf;
创建指向Leaf
的指针,它指向一些垃圾位置。当您尝试使用该垃圾指针时,您有undefined behavior,在本例中为SIGSEGV。
为了使第二种情况起作用,你需要为它分配内存,如
Leaf* leaf = new Leaf;
不要忘记,如果您使用new
/ new[]
,那么当您完成指针返回时,您需要调用delete
/ delete[]
存储器中。