在C中处理指向2D数组的指针时出现不稳定的行为

时间:2015-01-28 09:45:55

标签: c pointers multidimensional-array

我是一名业余C程序员,在编写代码以生成所需行和列的矩阵时,我决定使用指向2D数组的指针而不是直接使用它们。这是我写的:

#include <stdio.h>

typedef int matrices[1000][1000];

void matrixGenerator(matrices *matrix, int rows, int columns) { 
    int genMatrix[rows][columns];
    for (int i = 0; i <= rows; i++) {
        for (int j = 0; j <= columns; j++) {
            genMatrix[i][j] = 100; //Replace with some random value, 100 for testing
        }
    }
    matrix = &genMatrix;
}

int main(int argc, char *argv[]) {
    matrices *mainMatrix, *kernelMatrix;
    int rowsA = 0, columnsA = 0;
    int rowsB = 0, columnsB = 0;
    fprintf(stdout, "Enter number of rows and columns in the main matrix:");
    fscanf(stdin, "%d %d", &rowsA, &columnsA);
    matrixGenerator(mainMatrix, rowsA, columnsA);
    fprintf(stdout, "Enter number of rows and columns in the kernel matrix:");
    fscanf(stdin, "%d %d", &rowsB, &columnsB)   ;
    matrixGenerator(kernelMatrix, rowsB, columnsB);

    fprintf(stdout, "%d %d %d %d\n", rowsA, columnsA, rowsB, columnsB);

    for (int i = 0; i <= rowsA; i++) {
        for (int j = 0; j <= columnsA; j++) {
            fprintf(stdout, "%d\t", (*mainMatrix)[i][j]);
        }
        fprintf(stdout, "\n");
    }
    return 0;
}

我有两个问题:

  1. 如果我没有调用打印个人行和列的上一个fprintf语句,那么在调用matrixGenerator()之后打印数组内容的fprintf语句会导致程序崩溃矩阵。
  2. 打印时,会打印随机垃圾值。
  3. 我哪里错了?

1 个答案:

答案 0 :(得分:0)

您正在返回指向局部变量的指针,因此代码的行为是 undefined

matrix = &genMatrix;

genMatrix是本地的,因此当函数返回时,genMatrix不再有效。