gpt4 book ai didi

c++ - 了解堆栈、堆和内存管理

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:13 25 4
gpt4 key购买 nike

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,它会不会指向任何内容?

最佳答案

顺序是正确的,除了一点:

The delete []ip; removes the memory allocated on the heap to the ip pointer. The pointer that got passed through to myFun now points to nothing.

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

最后一个通知:myfun 可能会按值或按引用获取指针。存在差异,但您的句子仍然有效。

关于c++ - 了解堆栈、堆和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com