C++ 访问二维数组指针处的值

标签 c++ pointers multidimensional-array

我需要一个动态的二维整数数组,它将代表一个标准矩阵。大小和元素在运行时从文件中读入。

根据其他堆栈帖子的指导,我按如下方式设置了我的数组;

void buildArray(ifstream &file, int** 2dArray);
void buildQueue(Queue<int> &Q, int** 2dArray);

int main()
{
    int** 2dArray;
    Queue<int> Q;
    //...
    // open file
    //...
    buildMatrix(file, 2dArray)
    buildQueue(Q, 2dArray)
}

void buildArray(ifstream &file, int** 2dArray)
{
    int size, element;
    while (file.good()) {
        file >> size;

        2dArray = new int*[size];
        for (int i = 0; i < size; i++)
            2dArray[i] = new int[size];

        // now I should be able to use 2dArray[r][c]

        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                file >> element;
                2dArray[i][j] = element;
            }
        } 
}

然后我需要读取存储在每个位置 [r][c] 的整数并构建一个队列。我认为我的问题是取消引用指针...但我不确定。

void buildQueue(Queue<int> &Q, int** 2dArray)
{
    int row, column, element;
    // size is passed in as well, size is our rows or columns size here
    for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                row = i;
                column = j;
                element = 2dArray[i][j];   // getting seg fault here!

                Q.push_back(row, column, element);
            }
     }
 }

我应该补充一点,我知道我可以使用 vector 。我在这里挑战自己,使用指针负责任地构建、使用和释放二维数组。

最佳答案

什么是表格?

table = new int*[size];

这不应该是

2dArray = new int*[size];

也从函数返回指针

改变

void buildArray(ifstream &file, int** 2dArray)

int ** buildArray(ifstream &file)

否则 buildArray 会获取变量的拷贝。这个拷贝现在包含指向已分配内存的指针。调用函数中的指针永远不会更新。

在您的原始代码中,在调用 buildArray 之前和之后添加一个 printf 2dArray。

printf("%p, 2dArray);
buildMatrix(file, 2dArray);
printf("%p, 2dArray);

您会看到 2dArray 没有改变。所以你实际上是在传递一个未初始化的 指向 buildQueue 的指针。

buildArray 和 call 应该这样改

void buildArray(ifstream &file, int** arr)
{
    int size, element;
    while (file.good()) {
        file >> size;

        arr = new int*[size];
        for (int i = 0; i < size; i++)
            arr[i] = new int[size];


        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                file >> element;
                arr[i][j] = element;
            }
        }
    }

    return arr;
}

int main()
{
    int** 2dArray;
    Queue<int> Q;

    //...
    // open file
    //...
    2dArray = buildMatrix(file);
    buildQueue(Q, 2dArray);
}

关于C++ 访问二维数组指针处的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118917/

相关文章:

c++ - std::atomic<struct> 是否使所有成员也是原子的?

c++ - 类的指针成员必须指向堆分配的数据?

arrays - CakePHP函数将点分数组转换为多维

javascript - 修改多数组中的所有数组

c++ - OpenCV:读取视频序列的帧

c++ - 如何通过另一个变量的相对值来确定一个变量?

c++ - 显式使用模板,C++

另一个类操作中的 C++ 指针类

c - 函数调用中的 Malloc 似乎在返回时被释放?

java - 格式化二维数组中的 double