关于动态内存分配释放的问题, 百思不得其解, 恳请高手指教
函数 A 中动态分配了一块内存, 并返回指向此内存块的指针,
函数 B 中调用 A 得到此指针, 当用完后不再需要此内存块或
是函数退出后, 由 A 分配的这块内存是如何释放的呢?
是由系统自动释放还是要在 B 中显式地用 delete 完成呢.
特别当 A 中的内存块不是用 new 分配而是直接用数组预定义
好的如 char ar[200]; return ar; 这样, 那又该如何释放此内
存呢?
真是百思不得其解, 恳请高手指点!
#include <stdlib.h>
#include <iostream>
char* A()
{
char *str = new char[200]; //动态分配了200字节内存
//或者 char str[200];
strcpy(str, "hello");
return str; //返回指向此内存指针
}
void B()
{
char *p;
p = A(); //得到内存块指针
std::cout << p << std::endl;
p = "test ...";
//这个时候, p原先指向的内存是否会自动释放呢? 还是要在此语名前显式加上
//delete [] p; 语句, 如果不会自动释放, 那就会造成内存泻漏, 为什么我在
//所有的书上都没有看到过有这样显式用 delete 释放的,
//
//又如果内存会在无指针指向时自动释放, 那岂不是绝大多数delete语句也就
//意义不大了(除了对内存空间有特别需求), 反正系统会自动释放?
//
//更特别如果 A 中的内存不是由new分配而是由数组显未定义得来如
//char str[200]; , 那这时又是如何释放内存的呢?
return;
}
int main(int argc, char* argv[])
{
B();
return 0;
}