c++ - 什么是错误 (0xC0000005),我该如何解决?
问题描述
我是编码新手,所以我只是想创建一个函数,允许用户通过指定行数和列数以及数组元素的内容来创建二维数组。该函数应该通过指针数组返回数组,稍后在 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];
}
}
解决方案
很多问题。
CreateArray(MyPtr2Ptr);
这通过value传递双指针,因此不会修改原始变量。
void CreateArray(int **ptr2ptr)
此函数修改变量的本地副本,而不是原始副本。通过引用传递:
void CreateArray(int **& ptr2ptr)
或者,更好的是,完全忘记C 的东西并使用 STL。并使用您的调试器发现,一个好的 GUI 值是调试器的值,而不是编译器的值。
int TheArray[rows][columns];
可变大小数组,而不是 C++。当您将双数组转换为单个数组时,接下来会遇到麻烦。
推荐阅读
- java - XML 在多个标签中具有标签
- angular - 如何将数据推入数组
- c# - Xamarin.Forms 使用 Android 加载大型数据集
- html - 具有平方比例和弹性框的内部 div
- javascript - beforeunload 事件在 IE 10 中不起作用
- jquery - 使用 Twitter oEmbed 的 JSON 请求
- url - 如何在 argv 更改或添加参数并将其传递给 application.Run(argc,argv)
- php - 如何将 Reactjs 前端与 apache 服务器上的 php codeigniter 应用程序集成?
- python - 初学者程序员在这里..更简单的编程方法?
- linux - 如何从 TCPDUMP 文件中仅提取目标端口