高手帮我看看这里的delete出了什么问题

sli_romen 2007-08-10 12:22:30
最近发现个很诡异的delete的问题,代码如下:
#include <iostream>
using namespace std;

int* plus(int * first,int na, int * second,int nb){
int * result1;
if(na >= nb){
result1 = new int [na + 1];
int * add = new int [na];
add[0] = 0;
for(int i = 0;i < nb;i ++){
result1[i] = (first[i]+second[i]+add[i]) % 10;
add[i+1] = (first[i]+second[i]+add[i]) / 10;
}
for(;i < na;i ++){
result1[i] = (first[i]+add[i]) % 10;
add[i+1] = (first[i]+add[i]) / 10;
}
if(add[i] == 0) result1[i] = -1;
else result1[i] = add[i];
// delete [] add;
}
else{
result1 = new int [nb + 1];
int * add = new int [nb];
add[0] = 0;
for(int i = 0;i < na;i ++){
result1[i] = (first[i]+second[i]+add[i]) % 10;
add[i+1] = (first[i]+second[i]+add[i]) / 10;
}
for(;i < nb;i ++){
result1[i] = (second[i]+add[i]) % 10;
add[i+1] = (second[i]+add[i]) / 10;
}
if(add[i] == 0) result1[i] = -1;
else result1[i] = add[i];
// delete [] add;
}
return result1;
}

int main(){
int * first = new int [1];
first[0] = 1;
int na = 1;

int * second = new int [1];
second[0] = 2;
int nb = 1;

int * result = plus(first,na,second,nb);

cout <<first[0]<< " + " <<second[0]<< " = " <<result[0] << endl;
return 0;
}

这里代码是正常的,但是我把plus函数中的2行"//delete [] add;"去掉注释后,运行就有问题了。我莫名了,大大们帮看看是怎么回事吧。
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sli_romen 2007-08-10
  • 打赏
  • 举报
回复
怎么没人说话啊?
sli_romen 2007-08-10
  • 打赏
  • 举报
回复
嗯,果然是越界了,谢谢大牛们
shencyx 2007-08-10
  • 打赏
  • 举报
回复
for(int i = 0;i < nb;i ++){
result1[i] = (first[i]+second[i]+add[i]) % 10;
add[i+1] = (first[i]+second[i]+add[i]) / 10;
}
当na = nb = 1的时候,add[0+1]还不数组越界了??
你的代码太乱,你可以用几个空格代替TAB键,不然,都不想看了.
shencyx 2007-08-10
  • 打赏
  • 举报
回复
把int * add = new int [na];
改为int * add = new int [na+1];后运行一次,没问题.
for(int i = 0;i < nb;i ++){
result1[i] = (first[i]+second[i]+add[i]) % 10;
add[i+1] = (first[i]+second[i]+add[i]) / 10;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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