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.
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |