堆栈销毁期间自动堆​​清理

2 c c++ memory allocation

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

int main()
{
    int *p = f();
    //using p;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否真的在堆栈破坏期间函数返回它的值时,一些编译器(当我被告知时,隐含的VS或gcc等常见的那些)可能会尝试自动释放本地指针(例如p)所指向的内存?即使不是,我能否正常删除[]中分配的内存?问题似乎是那时关于精确数组大小的信息丢失了.另外,如果malloc和free,答案会改变吗?

谢谢.

小智 7

只有Local变量被销毁 - 释放.

在你的情况下p被"摧毁"(释放),但是什么p指向,不是 "被摧毁"(释放使用delete[]).

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

如果你想delete在函数"超出"(超出范围)时使用局部变量指向的内容std::auto_ptr()(仅适用于非数组变量,而不适用于需要的数组delete[])

另外,如果malloc和free,答案会改变吗?

不,但你应该确保你不要混free()/new/delete/malloc().这同样适用于new/delete[]new[]/delete.