new 分配内存问题

注:1.txt中的字符串为"HELLOWORLD"FILE*pFile=fopen("1.txt","r");char*str=newchar[1];//错误地方mems... 注: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".
展开
 我来答
焉湉湉00P
2008-08-15 · TA获得超过1856个赞
知道大有可为答主
回答量:1556
采纳率:100%
帮助的人:1395万
展开全部
你这个问题比较复杂,涉及操作系统分配内存

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

你可以使用
char *str=new char[100];
使用完后
delete []str;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式