gpt4 book ai didi

c++ - 堆栈销毁期间自动堆​​清理

转载 作者:太空狗 更新时间:2023-10-29 23:34:10 25 4
gpt4 key购买 nike

int* f()
{
int *p = new int[10];
return p;
}

int main()
{
int *p = f();
//using p;
return 0;
}

在堆栈销毁过程中,当函数返回它的值时,某些编译器(当我被告知时隐含了 VS 或 gcc 等常见编译器)是否可以尝试自动释放本地指针指向的内存,例如本例中的 p?即使不是,我是否能够正常删除 [] 分配给 main 的内存?问题似乎是此时丢失了有关确切数组大小的信息。另外,如果是 malloc 和 free,答案会改变吗?

谢谢。

最佳答案

只有本地变量被销毁-释放。

在你的情况下 p 是“销毁”(已发布),但是 p 指向的是“已销毁”(已发布)使用 delete[])。

是的,你可以,而且应该/必须在你的 main 上使用 delete[]。但这并不意味着在 C++ 中使用原始指针。您可能会发现这本电子书很有趣:Link-Alf-Book

如果您想在函数“结束”(超出范围)时删除局部变量指向的内容,请使用std::auto_ptr()(仅适用对于非数组变量,不是那些需要 delete[])

Also, would the answer change in case of malloc and free?

不是,但是您应该确保不要混合使用 free()/new/delete/malloc()。这同样适用于 new/delete[]new[]/delete

关于c++ - 堆栈销毁期间自动堆​​清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5668032/

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