短端阵列打印错误结果

时间:2016-04-16 16:18:01

标签: c++ arrays

我想创建缩短数组大小到cerstaind数。我有一个班级

class Numbers{
public:
  Numbers(){
     max = 10;
     arr = new int[max];
     current = 0;
 }
private:
 int *arr;
 int max;
 int current;
}

我只想做什么。如果数组包含数字(10),例如

arr // 1 2 3 4 5 6 7 8 9 10

并且我调用.shorten(number)方法,它会将数组缩短为所述数字,因此在6中它将是

arr // 1 2 3 4 5 6

我创建了一个方法

void Numbers::shorten(int a ){
  int *tmp = new int[a];
  for( int i = 0; i < a; i++){
    tmp[i] = arr[i];  
  }
  max = a;
  delete[] arr;
  arr = tmp;
}

当我调用此方法并打印数组时,输出应为1 2 3 4 5 6,但它会打印相同的数组,前两个数字是内存中的一些随机数。是什么导致这种情况,我该如何防止这种情况发生?

打印功能如下所示

void Numbers::PrintAll(){
  for( int i = 0; i < max ; i++){
    cout << arr[i] << endl;
  }
}

并将其声明为

Numbers one;

//我知道我可以使用STL容器,但我想用数组做这个。

1 个答案:

答案 0 :(得分:0)

您不会在input方法中修改max,因此shorten会尝试打印更多实际存在的数字。