char *pBuf = new char[100];
A* p = (A*)pBuf;
..............
DeviceIOControl(..,p,);
对p进行操作.
..............
delete pBuf; //非法(有时候)上面是一个函数,多次调用,在调用几次之后在上面出现非法.
A* p = (A*)pBuf;
..............
DeviceIOControl(..,p,);
对p进行操作.
..............
delete pBuf; //非法(有时候)上面是一个函数,多次调用,在调用几次之后在上面出现非法.
delete []pBuf;
你删除的是一个数组对象,不是单个对象
delete [] pBuf;
这才是释放分配的数组
释放数组前面是要加[],因为数组是在栈中创建的,他的分配不包含自由存储机构信息,所以随后的delete调用可能产生无法预料的结果。
一般是内存越界或指针无效
因为debug模式下分配内存的时候会多分配4个字节,这4个字节内容是0xFE,delete的时候会检查这4个字节,看是否越界。
检查下标
0-99如果多次调用最好用之前先memset一下
那就不用memset了
new xxx[] 对应 delete[] xxx;
new xxx[] 对应 delete[] xxx;
在debug模式下,越界的时候delete会非法操作,但是release模式下不会。
因为debug模式下分配内存的时候会多分配4个字节,这4个字节内容是0xFE,delete的时候会检查这4个字节,看是否越界。------------
说反了吧????