如何在函数中管理内存,它返回动态分配的变量? 当函数返回时,缓冲区会发生什么?
char * getStr(){
char * buffer = new char[12];
sprintf_s(buffer, 12 , "abcdef");
return buffer;
}
答案 0 :(得分:2)
buffer
保持分配,但幸运的是你正在返回指针。
你必须 delete[]
指针,否则你会泄漏内存。
注意我是如何使用[]
的:这很重要。这平衡了char
的数组的分配。 (从概念上讲,运行时存储使用new something[]
分配的数组的长度,delete[]
通知运行时释放正确数量的元素。)
答案 1 :(得分:1)
当函数返回时,缓冲区仍然存在。没有什么比嵌入式内存管理器,你必须释放你手动分配的所有内存。这是关于C.
在C ++标准库中,有一些称为智能指针的对象。由于存在例外情况,因此完全建议使用它们。关于他们的问题有很好的答案:What is a smart pointer and when should I use one?
答案 2 :(得分:0)
没有
存储在*buffer
中的地址将返回给调用者,并由调用者再次调用delete
内存。
答案 3 :(得分:0)
buffer
是一个指针,表示它处理内存中的一个点。
new
将为命令new char[12]
分配一块内存,它将分配12 char
个内存。
new
返回内存的地址,并分配给指针buffer
。
请注意,因为您只有指向内存的指针,所以需要在buffer
超出范围之前清除它。如果缓冲区buffer
中包含的地址超出范围,您将“泄露”内存。因为它无法回收。使用以下命令清除new char[12]
分配的内存:delete[]
。
答案 4 :(得分:0)