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 次 |
最近记录: |