指向数组的指针的 C++ 指针

标签 c++ arrays pointers g++ core

我在创建数组数组时遇到了一些问题,或者更准确地说是指向数组的指针数组,我似乎已经消除了所有错误,因为程序编译得很好(我使用的是 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 的指针数组,但是,它是按值传递的。所以原来的来电者ppmain不受影响。 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/

相关文章:

c++ - 如何将 dispatch_queue_t 分配给结构中的变量

c++ - 使用 AWS C++ SDK 的基本程序无法编译

java - 如何按给定顺序返回数组元素?

c++ - 删除指针 vector 时遇到问题

c++ - 读取字符到(字符指针)

C++ 双除以 0.0 与 DBL_MIN

javascript - JS 循环和填充数组。哪个更快?

php - 按键名对深度多维数组或生成的 JSON 进行排序

c++ - 如果另一个指针指向它的引用,为什么 const int 不会被编译器(通过符号表)优化?

c - 我释放节点的方式是否正确?