了解堆栈,堆和内存管理

Softey
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;

上面的代码只是测试功能的一小部分,我试图用它来了解堆栈和堆。

我不确定完全正确的顺序是什么。

到目前为止,这是我所拥有的:

  • 创建指针ip时,由于“ new”声明,它指向在堆上创建的大小为10的新int数组。
  • 0-9从0-9添加到数组。
  • 指针现在传递给myfun,这意味着myfun具有指向堆上相同内存空间的指针。
  • delete []ip;消除了对堆到IP指针分配的内存。传递给myFun的指针现在没有指向任何对象。
  • 一旦函数完成,则ip变量将被删除,因为它仅在函数本地。

有人可以澄清我是否正确,并纠正我出了问题的地方吗?另外,如果我尝试在那之后继续使用ip,那它会指向什么吗?

马克·A

除以下几点外,顺序是正确的:

delete [] ip; 删除在堆上分配给ip指针​​的内存。传递给myFun的指针现在没有指向任何对象。

指针不指向“无”(即未设置为释放内存nullptr0在释放内存之后)。它只是指向现在已释放内存的同一位置(即,标记为由应用程序释放的内存,无法再安全访问该内存)。通过该指针访问内存将触发未定义的行为

最后的通知:myfun可以按值或按引用获取指针。有差异,但是您的句子仍然有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章