我是一名业余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
语句会导致程序崩溃矩阵。我哪里错了?
答案 0 :(得分:0)
您正在返回指向局部变量的指针,因此代码的行为是 undefined 。
matrix = &genMatrix;
genMatrix
是本地的,因此当函数返回时,genMatrix
不再有效。