返回信息流程序里有一条这样的语句
bool *U1 = new bool[t-1];
其中t是一个int型变量,从1到N,我调试发现,t=1是这条语句没有问题,并且U1也被分到了地址,但是t=2时,windows会弹出下面的警告:
Windows has triggered a breakpoint in XXX.exe.
This may be due to a corruption of the heap, and indicates a bug in XXX.exe or any of the DLLs it has loaded.
The output window may have more diagnostic information
这时候程序调到
extern "C" _CRTIMP void __cdecl _free_dbg(
void * pUserData,
int nBlockUse
)
{
/* lock the heap
*/
_mlock(_HEAP_LOCK);
__try {
/* allocate the block
*/
_free_dbg_nolock(pUserData, nBlockUse);
}
=》__finally {
/* unlock the heap
*/
_munlock(_HEAP_LOCK);
}
}
不清楚到底是什么问题
谢谢
这是一条镜像帖。来源:北邮人论坛 / cpp / #36340同步于 2010/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
想问一个动态指针的问题
MZYX
2010/3/6镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我这跑也没问题,全是TRUE
【 在 MZYX 的大作中提到: 】
: 程序里有一条这样的语句
: bool *U1 = new bool[t-1];
: 其中t是一个int型变量,从1到N,我调试发现,t=1是这条语句没有问题,并且U1也被分到了地址,但是t=2时,windows会弹出下面的警告:
: ...................
使用 type* p=new type[n] 这样的语句,某些编译器,包括vc2005,会在堆中分配
n*sizeof(type)+4个字节,p指向 4号字节。0-3号字节中存放着n。
那么,bool *U1=new bool[t-1]; 这种代码在t=1时执行成功后,U1指向的是什么?
看错误警告,应该是在释放内存时出的错误。也许与此有关。
【 在 MZYX 的大作中提到: 】
: 程序里有一条这样的语句
: bool *U1 = new bool[t-1];
: 其中t是一个int型变量,从1到N,我调试发现,t=1是这条语句没有问题,并且U1也被分到了地址,但是t=2时,windows会弹出下面的警告:
: ...................
t=1时,会给U1分配地址0X003b660,释放内存时,没有错误或是警告,但是U1没有被释放掉,仍然指向0X003b660,当子函数(U1在这个子函数里)在次被调用是,U1有地址为0Xccccccc,然后在给U1分配地址是出错了,难道是U1没有被释放掉的原因吗?type* p=new type[0],那p到底是什么呢?我试试,当t=1时,把U1赋值为空指针。谢谢大家热情帮助哈!
【 在 MZYX 的大作中提到: 】
: t=1时,会给U1分配地址0X003b660,释放内存时,没有错误或是警告,但是U1没有被释放掉,仍然指向0X003b660,当子函数(U1在这个子函数里)在次被调用是,U1有地址为0Xccccccc,然后在给U1分配地址是出错了,难道是U1没有被释放掉的原因吗?type* p=new type[0],那p到底是什么呢?我试试,当t=1时,把U1赋值为空指针。谢谢大家热情帮助哈!
free一个指针并不一定改变指针的值,所以不能通过指针的值是否改变来判断内存是否释放
【 在 MZYX 的大作中提到: 】
: 我大概知道是哪里错了,估计是我删除指针的时候删除了两次,如果有两个动态指针指向同一块数据,那么删除的时候是删除其中任意一个,还是两个都删呢?
同一片内存只能释放一次,无论有多少个指针指向它