int *ip = new int[10];
for (int i = 0; i<10; i++)
*(ip+i) = i;
myfun(ip); // assume that myfun takes an argument of
// type int* and returns no result
delete [] ip;
上面的代码只是测试功能的一小部分,我试图用它来了解堆栈和堆。
我不确定完全正确的顺序是什么。
到目前为止,这是我所拥有的:
delete []ip;
消除了对堆到IP指针分配的内存。传递给myFun的指针现在没有指向任何对象。有人可以澄清我是否正确,并纠正我出了问题的地方吗?另外,如果我尝试在那之后继续使用ip,那它会指向什么吗?
除以下几点外,顺序是正确的:
delete [] ip; 删除在堆上分配给ip指针的内存。传递给myFun的指针现在没有指向任何对象。
指针不指向“无”(即未设置为释放内存nullptr
或0
在释放内存之后)。它只是指向现在已释放内存的同一位置(即,标记为由应用程序释放的内存,无法再安全访问该内存)。通过该指针访问内存将触发未定义的行为。
最后的通知:myfun
可以按值或按引用获取指针。有差异,但是您的句子仍然有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句