delete 放掉new申请的内存,出现非法有哪几种情况?

asd2000 2005-07-03 11:03:00
char *pBuf = new char[100];
A* p = (A*)pBuf;
..............
DeviceIOControl(..,p,);
对p进行操作.
..............
delete pBuf; //非法(有时候)

上面是一个函数,多次调用,在调用几次之后在上面出现非法.
...全文
201 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen18s 2005-07-05
  • 打赏
  • 举报
回复
回复人: idAnts(你才无聊呢) ( ) 信誉:110 2005-7-4 9:36:02 得分: 0
在debug模式下,越界的时候delete会非法操作,但是release模式下不会。
因为debug模式下分配内存的时候会多分配4个字节,这4个字节内容是0xFE,delete的时候会检查这4个字节,看是否越界。

------------
说反了吧????
snowshow 2005-07-05
  • 打赏
  • 举报
回复
看错了,是函数啊
那就不用memset了
snowshow 2005-07-05
  • 打赏
  • 举报
回复
肯定越界了
检查下标
0-99

如果多次调用最好用之前先memset一下
lzzqqq 2005-07-05
  • 打赏
  • 举报
回复
new 对应 delete;
new xxx[] 对应 delete[] xxx;
lzzqqq 2005-07-05
  • 打赏
  • 举报
回复
new 对应 delete;
new xxx[] 对应 delete[] xxx;
zhangxs 2005-07-05
  • 打赏
  • 举报
回复
最有可能的是内存操作越界问题,我就遇见过这个问题。
kuhx 2005-07-04
  • 打赏
  • 举报
回复
在VC中new一个数组是可以直接使用delete来释放的,可以不用delete[],尽管这种习惯不好,但是它在VC中不会造成非法
asd2000 2005-07-04
  • 打赏
  • 举报
回复
但事实上是非法了.
idAnts 2005-07-04
  • 打赏
  • 举报
回复
在debug模式下,越界的时候delete会非法操作,但是release模式下不会。
因为debug模式下分配内存的时候会多分配4个字节,这4个字节内容是0xFE,delete的时候会检查这4个字节,看是否越界。
goodboyws 2005-07-04
  • 打赏
  • 举报
回复
delete pBuf;不会非法
一般是内存越界或指针无效
ricky20045 2005-07-04
  • 打赏
  • 举报
回复
楼上说的对
释放数组前面是要加[],因为数组是在栈中创建的,他的分配不包含自由存储机构信息,所以随后的delete调用可能产生无法预料的结果。
leebuilder 2005-07-04
  • 打赏
  • 举报
回复
楼上说的对,应该这样
delete [] pBuf;
这才是释放分配的数组
xing_xing_xing 2005-07-03
  • 打赏
  • 举报
回复
这样删除
delete []pBuf;
你删除的是一个数组对象,不是单个对象

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧