new 分配内存问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 00:11:41
注:1.txt中的字符串为"HELLO WORLD"
FILE *pFile=fopen("1.txt","r");
char *str=new char[1];//错误地方
memset(str,0,100);
fread(str,1,100,pFile);
CClientDC dc(this);
dc.TextOut(0,0,str,strlen(str));
程序输出正常,不过当程序关闭之后,出现错误对话框。
而且在最后面加上delete []str也照样出错。

当我把char[1]改成char[100]就不会出错。
这是为什么?如果说是分配的内存不够的话,那程序也正常显示了“HELLO WORLD".

你这个问题比较复杂,涉及操作系统分配内存

虽然你new char[1]的时候程序可以执行,但这个执行是不一定成功的,因为分配给你的空间只有1字节,但你却memset了100字节;这么做如果不出错的话,那就是破坏了程序在其它数据区间的数据,所以你退出或者运行到其它地方程序就会出错了;现在你的程序可以比较小,memset那样也没什么错误提示,但如果你这个是大工程,执行完这步操作后再执行其它操作可以马上就遇到Access Violent非法访问错误了。

你可以使用
char *str=new char[100];
使用完后
delete []str;