使用delete 删除指针类型数组时报错

jackisgod 2011-02-16 02:32:28
我是用指针型数组,并且交换了2个数组的首地址,其实就是为了把2个数组的值互相交换,然后用delete申请的内存空间时,回内存崩溃……
以下是代码
double *Vji_1=new double [m];
double *Vji=new double [m];
double *temp=new double [m];

中间的代码都是用来计算Vji_1 和 Vji 元素的值
//swap the array.

temp=Vji_1;
Vji_1=Vji;
Vji=temp;

double V00;
V00=Vji_1[0];
delete [] Vji_1;
delete [] temp;
cout<<endl;
cout<<V00<<endl;

return V00;


然后调试会报错
我跟踪了一下 每次都是在这里报错
delete [] Vji_1;
错误是这样的
Windows has triggered a breakpoint in exercise 1.exe.

This may be due to a corruption of the heap, which indicates a bug in exercise 1.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while exercise 1.exe has focus.

The output window may have more diagnostic information.

点击 break 报错如下:
Call stack location:
ntdll.dll!76ff542c()
...全文
813 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xumaojun 2011-02-16
  • 打赏
  • 举报
回复
没看明白楼主要干什么,你把两个数组的指针交换一下有什么意义呢
赵4老师 2011-02-16
  • 打赏
  • 举报
回复

new和delete

fopen和fclose
那样
用!
yfk 2011-02-16
  • 打赏
  • 举报
回复
程序两个问题:
1. delete[] 需要指针指向内存长度的信息
交换后,丢失,故出错
2. temp只用作指针交换中间量的话,不需要给其申请内存,申请的话,注意最后析构掉
nwao7890 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xgy8705023 的回复:]

引用 3 楼 bdmh 的回复:
Vji_1=Vji;这句话,已经破坏了初始的Vji_1了,这样delete时,就会发现不是最初的指针了,删除报错

当一个指针改变了指向;那么在释放之前,应确保其回到原来的指向
[/Quote]
double * p1 = new double[5];
double *p2 = new double[5];
double * p3 = NULL;

*p1 = 1;
*p2 = 2;
p3 = p1;
p1 = p2;
p2 = p3;

delete []p1;
delete []p2;在VC6上并没有报错啊。我觉得delete [] temp才是原因。楼上说的对。
loveyangming 2011-02-16
  • 打赏
  • 举报
回复
delete [] Vji_1;
delete [] temp;

这两个指针指向同一个数组 delete []vji_1 已经删除了数组 temp是一个指向已经被删除了的内存块在删一次当然会错误 了
xgy8705023 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
Vji_1=Vji;这句话,已经破坏了初始的Vji_1了,这样delete时,就会发现不是最初的指针了,删除报错
[/Quote]
当一个指针改变了指向;那么在释放之前,应确保其回到原来的指向
羽飞 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]

Vji_1=Vji;这句话,已经破坏了初始的Vji_1了,这样delete时,就会发现不是最初的指针了,删除报错
[/Quote]

那为什么不会把Vji指向的内存删掉?
bdmh 2011-02-16
  • 打赏
  • 举报
回复
Vji_1=Vji;这句话,已经破坏了初始的Vji_1了,这样delete时,就会发现不是最初的指针了,删除报错
loveanybody 2011-02-16
  • 打赏
  • 举报
回复
temp 可以直接给地址 不用再重新申请一遍空间了。
MagiSu 2011-02-16
  • 打赏
  • 举报
回复
你的temp不应该申请空间。不然就泄漏了。

64,639

社区成员

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

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