我将一个动态数组传递给一个函数,该函数的值应该被添加到数组中,当我动态放大并重置数组并迭代数组时,我发现数组的最后一个值是一个垃圾值而不是预期的。我已经看了一些关于SO的其他帖子以及一些文档,我很难理解我做错了什么。 我更喜欢使用矢量,但不幸的是,我的作业需要动态数组。有什么想法吗?感谢。
上面的帖子是通过引用传递指向向量的指针,与放大动态数组无关
主要
cout << "Please enter the size of the array of integers you would like to create: ";
cin >> size;
cout << "\nPlease enter your integers:\n";
int *integerArray = new int[size];
//store values in array
for (int dynamicArrayDataCounter = 0; dynamicArrayDataCounter < size; dynamicArrayDataCounter++)
cin >> integerArray[dynamicArrayDataCounter];
cout << "\n Please enter the integer you would like to insert into this array: ";
cin >> userInt;
InsertIntegerToSortedList(integerArray, userInt, size);
//Print array for proof
for (int counterPrinter = 0; counterPrinter < size + 1; counterPrinter++)
cout << endl << integerArray[counterPrinter];
//Remove memory and repoint dangling pointer
delete [] integerArray;
integerArray = NULL;
return 0;
}
功能
void InsertIntegerToSortedList(int *integerArray, int userInteger, int size)
{
//Declare new array to add index position for integerArray
int *resizedArray = new int[size + 1];
bool numInserted = false;
for (int counter = 0; counter < size + 1; counter++)
{
if (integerArray[counter] < userInteger)
{
resizedArray[counter] = integerArray[counter];
}
else if ((integerArray[counter] > userInteger && integerArray[counter - 1] < userInteger) || integerArray[counter] == userInteger || (integerArray[counter] <= userInteger && size - counter == 1))
{
resizedArray[counter] = userInteger;
numInserted = true;
}
else if (numInserted)
resizedArray[counter] = integerArray[counter - 1];
}
//Store resizedArray values in integerArray
integerArray = resizedArray;
//Remove dynamic array on heap and repoint dangling pointer
delete[] resizedArray;
resizedArray = NULL;
}
答案 0 :(得分:4)
在
void InsertIntegerToSortedList(int *integerArray, int userInteger, int size)
您正在通过值传递指针integerArray
,因此在函数的退出处,您最终不会修改它。通过引用传递,如
void InsertIntegerToSortedList(int* & integerArray, int userInteger, int size)
此外,正如评论中所提到的,你做得有点不对劲。首先,将数组元素复制到resizedArray
。接下来,您需要删除旧数组
delete[] integerArray;
最后将新分配的数组分配给integerArray
integerArray = resizedArray;
需要全部,现在integerArray
将指向通过resizedArray
分配的内存。无需将resizedArray
设置为NULL
,它只是一个在函数出口处不再存在的局部变量。你关心的只是你分配的内存的地址,你已经将它存储到integerArray
指针中。