This question already has answers here:
How to access a local variable from a different function using pointers?
                                
                                    (9个答案)
                                
                        
                                5年前关闭。
            
                    
我是一名业余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;
}


我有两个问题:


如果我不调用前面的打印单个矩阵的行和列的fprintf语句,则在调用matrixGenerator()之后打印数组内容的fprintf语句会使程序崩溃。
当它打印时,它会打印随机垃圾值。


我要去哪里错了?

最佳答案

您将返回一个指向局部变量的指针,因此代码的行为是不确定的。

matrix = &genMatrix;

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

10-07 20:33