0

我在创建数组数组时遇到了一点问题,或者更准确地说是指向数组的指针数组,我似乎已经消除了所有错误,因为程序编译得很好(我使用的是 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;
    }
4

2 回答 2

2
 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仍然存在。当您尝试为其分配价值时。这将导致核心转储。uninitializedcreate_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
于 2013-04-25T17:59:49.083 回答
0

你不想初始化指针,做一个参考。

于 2013-04-25T18:08:55.540 回答