c++ - Visual Studio 指针错误

标签 c++ pointers allocation

当我运行这段代码时:

#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/

相关文章:

c++ - 使用其他编译器在 C++ 中清除屏幕

c++ - IncrediBuild 显着增加链接时间

c - 为什么更改结构指针后会出现段错误?

ios - 无法理解 NSError/NSObject 指针传递行为

Fortran 90 自动(?)分配可分配对象

c++ - static_message 或类似的东西

C++:cout 语句使我的程序失控?

javascript - c 指针和 javascript

c++ - Linux 分配器不会释放小块内存

objective-c - 使用分配和初始化