我有一个向数组添加整数的函数。如果空间用完,它应该使数组大小加倍并在下一个空闲点添加值。因此,如果数组大小为3,我输入99,105和45.现在,如果我想添加100,则应创建一个大小为6的新数组。下面是一段代码。一切正常,我甚至在本地函数中显示数组[4],返回100.当程序返回主程序再次显示菜单时,所有值都变为-572662307。我花了好几天试图解决这个问题,但不能。有人可以帮忙吗?
//Snippet from Main
cout<<"Enter the size of the array to be created";
cin >> size;
int *myArray = new int[size]();
add(myArray,Size);
//Problematic Code
void add (int Array[], int size){
int* temp = new int[size*2]; // create new Array 2x The Size
for (int i = 0; i < size; i++) {
temp[i] = Array[i];//Copy data over
}
delete [] Array;//Delete the old array
Array = temp;
cout << "\n\nEnter a Number: ";
cin >> newNumber;
Array[sizeTrack] = newNumber;
sizeTrack = sizeTrack++;
答案 0 :(得分:2)
如果这是学校作业而您无法使用std::vector
,那么您需要通过将参数声明为int Array[]
来了解它,它与int* Array
完全相同。你拥有的是一个指针,并在调用该函数时传递指针的副本。
最后一部分很重要:您传递变量中值的副本。这意味着,当您修改函数内的参数变量时,您只需修改副本。修改副本会使原始版本保持不变。
这里有两种可能的解决方案,您应该已经知道(通过您的教科书和课堂笔记)或者应该能够在您的教科书中找到: