首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

高手帮小弟我看看这里的delete出了什么有关问题

2012-02-27 
高手帮我看看这里的delete出了什么问题最近发现个很诡异的delete的问题,代码如下:#includeiostreamusing

高手帮我看看这里的delete出了什么问题
最近发现个很诡异的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; "去掉注释后,运行就有问题了。我莫名了,大大们帮看看是怎么回事吧。

[解决办法]
把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;
}

热点排行