This question already has answers here:
How to access a local variable from a different function using pointers?
(9个答案)
5年前关闭。
我是一名业余C程序员,在编写代码以生成所需行和列的矩阵时,我决定使用指向2D数组的指针,而不是直接使用它们。这是我写的:
我有两个问题:
如果我不调用前面的打印单个矩阵的行和列的
当它打印时,它会打印随机垃圾值。
我要去哪里错了?
(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