什么是错误(0xC0000005),我该如何解决?

时间:2019-06-10 18:02:51

标签: c++ codeblocks

我是编码的新手,所以我只是想尝试创建一个函数,该函数允许用户通过指定行数和列数以及数组元素的内容来创建二维数组。该函数应该通过一个指针数组返回该数组,稍后在main()中,我调用该函数并使用for循环显示该数组的内容。当我运行该应用程序时,该函数似乎可以正常运行,但是未显示数组的内容。该过程返回“ -1073741819(0xC0000005)”。此错误是什么意思,我该如何解决?此外,有没有更干净,更有效的方法从函数返回数组?另外,我认为问题出在main()的for循环中,因为我将其注释掉了,然后该进程返回了0。

void CreateArray(int **ptr2ptr) {
cin >> rows;
cin >> columns;

int TheArray[rows][columns];

     //fill array
for (int i = 0; i < rows; i++)
 {
        cout << "Enter values for row  " << i +1 << ":" << endl;

    for (int k =0; k < columns; k++)
    {
        int x;
        cin >> x;
        TheArray[i][k]= x;
    }
 }
    int *array4ptrs[rows*columns];
    array4ptrs[rows * columns] = new int[rows*columns];

    // fill array of pointers
    for (int c=0; c< (rows * columns); c++) {
       array4ptrs[c] = TheArray[c];
    }
 ptr2ptr = array4ptrs;
}

int main() {

    int **MyPtr2Ptr;
CreateArray(MyPtr2Ptr);


for (int z = 0; z <sizeof (MyPtr2Ptr); z++) {
        cout << *MyPtr2Ptr[z] << endl;
}


    for (int z = 0; z < sizeof (MyPtr2Ptr);z++) {
    delete MyPtr2Ptr[z];
}

}

1 个答案:

答案 0 :(得分:0)

很多问题。

CreateArray(MyPtr2Ptr);

这将按值传递双指针 ,因此原始变量不会被修改。

void CreateArray(int **ptr2ptr)

此函数修改变量的本地副本,而不是原始副本。通过引用传递:

void CreateArray(int **& ptr2ptr)

或者更好的是,完全忘记 那些C东西并使用STL。并使用您的调试器找出一个好的GUI值是调试器的值,而不是编译器的值。

int TheArray[rows][columns];

可变大小数组,而不是C ++。接下来,当您将双精度数组转换为单个数组时会遇到麻烦。