当我运行这段代码时:
#include <iostream>
using namespace std;
void makeArrayBigger(int*, int&, int);
void arrayIni(int*, int, int);
void displayArray(int*, int);
int main(){
int size = 5;
int *arr = new int[5];
arrayIni(arr, size, 0);
//displayArray(arr, size);
makeArrayBigger(arr, size, 8);
//displayArray(arr, size);
arrayIni(arr, size, 1);
system("pause");
return 0;
}
void makeArrayBigger(int *arr, int &size, int newSize){
int *newArr = new int[newSize];
for (int counter = 0; counter < size; counter++){
newArr[counter] = arr[counter];
}
delete[] arr;
arr = new int[newSize];
for (int index = 0; index < size; index++){
arr[index] = newArr[index];
}
delete[] newArr;
size = newSize;
}
void arrayIni(int *arr, int size, int ini){
for (int index = 0; index < size; index++){
arr[index] = ini;
}
}
void displayArray(int *arr, int size){
if(arr == NULL)
return;
for (int counter = 0; counter < size; counter++){
cout << arr[counter] << endl;
}
cout << endl;
}
我得到这个断点错误:
Windows 已在 pointer.exe 中触发断点。
这可能是由于堆损坏,这表明 pointer.exe 或它加载的任何 DLL 中存在错误。
这也可能是由于用户在 pointer.exe 具有焦点时按了 F12。
最佳答案
这个错误的原因是您混淆了'按值传递'和'按引用传递'的概念。 以下问题的答案可能是一个很好的引用:
What's the difference between passing by reference vs. passing by value?
问题将通过用以下代码替换 void makeArrayBigger()
接口(interface)来解决
void makeArrayBigger(int* &arr, int &size, int newSize);
更新:
当我传递一个指针时,我传递的是一个指向同一位置的指针。
位置相同但不同指针。无论是delete
还是malloc
新指针都不会改变实参的值。
在这种情况下,arr
指针在 makeArrayBigger()
之后保持相同的大小。但它会被假定为 arrInit()
中的新 size(8)。
关于c++ - Visual Studio 指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22003782/