我在创建数组数组时遇到了一些问题,或者更准确地说是指向数组的指针数组,我似乎已经消除了所有错误,因为程序编译得很好(我使用的是 g++)但是当我尝试运行它时,它给出了“核心转储”消息。
这是我的代码?
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
void create_array(int **pp)
{
pp = new int*[4];
for (int i = 0; i<4; i++)
{
pp[i] = new int[4];
}
}
int main()
{
srand(time(NULL));
int **pp;
create_array(pp);
for (int x = 0; x<4; x++)
{
for(int y = 0; y<4; y++)
{
pp[x][y] = rand()%9;
}
}
cout << pp[3][2] << endl;
return 0;
}
最佳答案
void create_array(int **pp)
{
pp = new int*[4];
for (int i = 0; i<4; i++)
{
pp[i] = new int[4];
}
}
pp
是指向 int
的指针数组,但是,它是按值传递的。所以原来的来电者pp
在 main
不受影响。 pp
里面main
保持uninitialized
在您调用 create_array
后功能。当您尝试为其分配值时。它将导致核心转储。
尝试使用vector <vector<int>>
而不是在 C++ 中。
或者尝试:
void create_array(int **&pp)
{ //^^
pp = new int*[4];
for (int i = 0; i<4; i++)
{
pp[i] = new int[4];
}
}
通过上述更改,如果您尝试在我的机器上打印整个矩阵,它会输出以下内容:
8 7 6 3
3 5 6 4
3 8 7 6
0 0 5 8
关于指向数组的指针的 C++ 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16221523/