动态创建的字符串数组,怎样释放内存?解决方法
动态创建的字符串数组,怎样释放内存??
char **Buffer=new char*[1000];
用 delete Buffer; 或 delete []Buffer; 好像释放不了
------解决方案--------------------
delete []Buffer是对的,你的误区在于,你认为释放以后,
Buffer的值应当对应于一种“释放了的”状态
但世纪上,作为一个指针,它的表现方式只是一个整数(或类似的东西),
这个整数标明了变量或者数组在内存中的地址(物理地址或者虚拟地址),
在这个指向的地址的内容被释放以后,这片内存已经不能再去访问了,除非
另外一个指针指向了它。
但你的指针变量不是这样的,它还是保留这一个整数,对应于某个地址,
但你不用担心,指向的那块内存已经被正确释放了
好的风格是,在你delete []buf;以后,你写上buf=0,这样可以避免一些
不必要的混淆
------解决方案--------------------
你的delete只是把内存从你的程序还给系统堆管理函数。
任务监视器监视的是系统堆管理函数从os申请的内存。
这是2码事呀。
------解决方案--------------------
建议读一下林锐的那篇文章
------解决方案--------------------
char **Buffer=new char*[100];
for (int i = 0; i < 100; i++) {
delete Buffer[i];
}
delete Buffer;
char **Buffer=new char*[1000];
用 delete Buffer; 或 delete []Buffer; 好像释放不了
------解决方案--------------------
delete []Buffer是对的,你的误区在于,你认为释放以后,
Buffer的值应当对应于一种“释放了的”状态
但世纪上,作为一个指针,它的表现方式只是一个整数(或类似的东西),
这个整数标明了变量或者数组在内存中的地址(物理地址或者虚拟地址),
在这个指向的地址的内容被释放以后,这片内存已经不能再去访问了,除非
另外一个指针指向了它。
但你的指针变量不是这样的,它还是保留这一个整数,对应于某个地址,
但你不用担心,指向的那块内存已经被正确释放了
好的风格是,在你delete []buf;以后,你写上buf=0,这样可以避免一些
不必要的混淆
------解决方案--------------------
你的delete只是把内存从你的程序还给系统堆管理函数。
任务监视器监视的是系统堆管理函数从os申请的内存。
这是2码事呀。
------解决方案--------------------
建议读一下林锐的那篇文章
------解决方案--------------------
char **Buffer=new char*[100];
for (int i = 0; i < 100; i++) {
delete Buffer[i];
}
delete Buffer;