简体   繁体   中英

C++ pointer of pointers to arrays

I have a bit of a problem with creating an array of arrays, or an array of pointers to arrays to be more precise, I seem to have eliminated all errors because the program compiles just fine (I'm using g++) however when I try to run it it gives a "core dumped" message.

This is my code?

#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 is an array of pointers to int , however, it is passed by value. so the original caller pp in main is not affected. pp inside main remain uninitialized after you call the create_array function. When you try to assign value to it. it will result in core dump.

try to use vector <vector<int>> instead in C++.

Or try:

void create_array(int **&pp)
{                     //^^
    pp = new int*[4];
    for (int i = 0; i<4; i++)
    {
        pp[i] = new int[4];
    }
}

with the above change, it outputs the following if you try to print the whole matrix on my machine:

 8 7 6 3
 3 5 6 4
 3 8 7 6
 0 0 5 8

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM