大家帮忙看看delete指针数组的问题 delete p[i];//那位老兄说的我也不明白 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题又多了一个,p[i]是字符型的指针,new的时候用了[],delete的时候也应该用[]才对啊? char *p;char a[100];p=new a;delete []p;可能是这样的!!具体是怎样的,我记不清了!!SORRY!! delete []p;删除的是指针数组 不是数阻一般的数组 直接delete 就可以了 說甚麼中國程序員, 係http://www.csdn.net/expert/topic/379/379417.shtm中#include <fstream.h>#include <assert.h>#include <string.h>void main(){const MaxLine = 5;char *p[MaxLine];const SZ = 255;char buf[SZ];ifstream in("test.dat");assert(in);int LineCount = 0;while(in.getline(buf, SZ) && LineCount < MaxLine){char *temp = new char[strlen(buf)];strcpy(temp, buf);p[LineCount++] = temp;}for (int i = 0; i < LineCount; i++){cout<<p[i]<<endl;delete []p[i]; ///为什么这句会出错}}根本就係因為佢無分配'\0'給每一行(p[i]), 當strcpy時, 因為strcpy在p[i]這個字串的最後加入了一個'\0', 所以超越了所分配的內存, 把內存的控制塊破壞了, 但這個Byte是可讀可寫的, 所以不會引起即時的錯誤(但已種下了一個陷井), 當free固內存時, 由於內存控制塊已被破壞, 所以發生"DAMAGE: after Normal block (#25)"錯誤.因些只需把:char *temp = new char[strlen(buf)]; 改成 char *temp = new char[strlen(buf) + 1];就可以啦! 唔信可以試試!但這班所謂的中國程序員, 在這個小問題上爭論不休, 連什麼內存與Null-terminated String(For example:"hello"有五個字, 但是存在內存是"hello\0"共六個字=5+1)都分不清楚, 還敢上來CSDN講話發表文章, 回去看什麼"C語言X日通"吧! To thomas269(Thomas): 高手都在忙着做活, 只有爱学习弱人才来这里乱侃~~~你又算哪跟葱?说程序员们不行可以, 但不要带上中国来修饰~~懂吗?白痴~~~~ windows api可否重定向标准输入输出? MFC对话框,用OpenGl画图,怎么得到画的图相对于对话框的坐标? 关于图像实时传输的问题 请问为什么我用SetupDiEnumDeviceInterfaces函数来获取USB设备总是返回失败? 请教一个临界区的问题 CFile打开文件读取数据乱码? 请各位大哥推荐一下学习DirectX和游戏编程的好去处(Chinese) 请教各位,怎样在其他的类里给一个对话框类里的list box赋值? 文件读取 超星端口? 韩国朋友请教图像抓取问题. yoboo_yb兄进来拿分,先给20,你进来再加到300
char a[100];
p=new a;
delete []p;
可能是这样的!!具体是怎样的,我记不清了!!
SORRY!!
删除的是指针数组 不是数阻一般的数组 直接delete 就可以了
#include <fstream.h>
#include <assert.h>
#include <string.h>void main()
{
const MaxLine = 5;
char *p[MaxLine];const SZ = 255;
char buf[SZ];ifstream in("test.dat");
assert(in);
int LineCount = 0;while(in.getline(buf, SZ) && LineCount < MaxLine)
{
char *temp = new char[strlen(buf)];
strcpy(temp, buf);
p[LineCount++] = temp;
}for (int i = 0; i < LineCount; i++)
{
cout<<p[i]<<endl;
delete []p[i]; ///为什么这句会出错
}
}
根本就係因為佢無分配'\0'給每一行(p[i]), 當strcpy時, 因為strcpy在p[i]這個字串的最後加入了一個'\0', 所以超越了所分配的內存, 把內存的控制塊破壞了, 但這個Byte是可讀可寫的, 所以不會引起即時的錯誤(但已種下了一個陷井), 當free固內存時, 由於內存控制塊已被破壞, 所以發生"DAMAGE: after Normal block (#25)"錯誤.
因些只需把:
char *temp = new char[strlen(buf)]; 改成 char *temp = new char[strlen(buf) + 1];
就可以啦! 唔信可以試試!
但這班所謂的中國程序員, 在這個小問題上爭論不休, 連什麼內存與Null-terminated String(For example:"hello"有五個字, 但是存在內存是"hello\0"共六個字=5+1)都分不清楚, 還敢上來CSDN講話發表文章, 回去看什麼"C語言X日通"吧!