为什么delete时会报错

saleens7 2011-11-16 02:32:26
源代码如下:

void main()
{
int i,j;
double **p;
p=new double*[1000];

for (int m=0;m<5000;m++)
{
p[m]=new double[5000];
}
clock_t beg, end;
double time;
beg=clock();
for (i=0; i<1000; i++)
{
for (j=0; j<5000; j++)
{
p[i][j]=0.5;
}
}

for (i=0; i<1000; i++) {
for (j=0; j<5000; j++) {
p[i][j]=p[i][j]*p[i][j]+2.0*p[i][j]+10.0;
}
}

end=clock();
time=(double)(end-beg)/CLOCKS_PER_SEC;
printf("Compute time is %f seconds\n",time);
for (int n=0;n<5000;n++)
{
delete[] p[n];
}
delete[] p;
}

报错:file:dbgdel.cpp
line:47
Expression:_BLOCK_TYPE_IS_VALID(pHesd->nBlockUse)
...全文
234 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysleepers 2011-11-17
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()
{
int i,j;
double **p;
p=new double*[1000];

for (int m=0; m<5000; m++)
{
p[m]=new double[5000];
}

for (i=0; i<1000; i++)
{
for (j=0; j<5000; j++)
{
p[i][j]=0.5;
}
}

for (i = 0; i < 1000; i++)
{
for (j = 0; j < 5000; j++)
{
p[i][j]=p[i][j]*p[i][j]+2.0*p[i][j]+10.0;
}
}


for (int n = 0; n < 1000; n++)
{
delete[] p[n];
}
return 0;
}
Xomic 2011-11-17
  • 打赏
  • 举报
回复
这还用问,不是重复释放内存了,就是释放了不存在的内存...
liujunhuajuan 2011-11-17
  • 打赏
  • 举报
回复
又在这里看到了一个问题的解答。
modicum_lf 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
for (int m=0;m<5000;m++)你上面分配的是1000个指针,这里变成5000了。
{
p[m]=new double[5000];
}
[/Quote]

++
saleens7 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 linuxtiger 的回复:]

for (int m=0;m<5000;m++)

越界了,你分配了1000个指针空间,却给5000个空间初始化了。把两处循环临界值改成m<1000即可。
[/Quote]

谢谢哈,我没看出来这儿!
saleens7 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenjiawei007 的回复:]

delete了已经删除过的指针就会报错。你的p delete了两次。
[/Quote]

这个原因我也知道,请继续指教一下,这个到底该怎么改嘛?我试过几种方法都不行!谢谢!
对象 2011-11-16
  • 打赏
  • 举报
回复
for (int m=0;m<5000;m++)

越界了,你分配了1000个指针空间,却给5000个空间初始化了。把两处循环临界值改成m<1000即可。
pengzhixi 2011-11-16
  • 打赏
  • 举报
回复
for (int m=0;m<5000;m++)你上面分配的是1000个指针,这里变成5000了。
{
p[m]=new double[5000];
}
chenjiawei007 2011-11-16
  • 打赏
  • 举报
回复
delete了已经删除过的指针就会报错。你的p delete了两次。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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