gpt4 book ai didi

c - 打印在函数中初始化但全局声明的二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:37 25 4
gpt4 key购买 nike

我正在尝试打印一个二维数组,该数组已全局声明为双指针并在 main() 中的函数内初始化,但出现核心转储错误。
我在这里做错了什么?

文件中存储的数组:

1 2
3 4
5 6

代码:

#include <stdio.h>
#include <stdlib.h>


int** matrix_A = 0;

void initArray ( int** matrixPtr, FILE* matrixFP, int row, int col );


int main ( int argc, char* argv[] )
{
FILE* matrixAfp = fopen ( argv[1], "r" );
int M = atoi ( argv[3] );
int N = atoi ( argv[4] );
initArray ( matrix_A, matrixAfp, 3, 2 );
for ( size_t m = 0; m < M; m++ )
{
for ( size_t n = 0; n < N; n++ )
{
printf ( "%d \n", matrix_A[m][n] );
}
}

return 0;
}


void initArray ( int** matrixPtr, FILE* matrixFP, int row, int col )
{
matrixPtr = ( int** ) malloc ( row * sizeof ( int* ) );
for ( size_t m = 0; m < row; m++ )
{
matrixPtr[m] = ( int* ) malloc ( col * sizeof ( int ) );
}

for ( size_t n = 0; n < row; n++ )
{
for ( size_t o = 0; o < col; o++ )
{
fscanf ( matrixFP, "%d", &matrixPtr[n][o] );
}
}
}

最佳答案

问题在于,由于您将 matrix_A 按值传递给函数,因此 matrixPtr 实际上是全局 matrix_A 的副本,这意味着函数内部的所有更改都发生在 matrixPtr 而不是全局定义的 matrix_A

要解决这个问题,您可以通过引用传递它:
void initArray(int** &matrixPtr, FILE *matrixFP, int row, int col)

除此之外,还有:

int M = atoi(argv[3]);
int N = atoi(argv[4]);

应该是:

int M = atoi(argv[2]);
int N = atoi(argv[3]);

关于c - 打印在函数中初始化但全局声明的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com