【发布时间】:2023-04-09 11:17:01
【问题描述】:
我的代码有一些问题。一切安好; gcc 没有显示错误或警告; valgrind 说没有内存泄漏,但我的数组没有打印出来,我不知道为什么。是fscanf() 工作不正常还是我打印不正确?
#include <stdio.h>
#include <stdlib.h>
int arrsize (FILE *file)
{
if (file == NULL) {
printf("Error: file pointer is null.");
return 0;
}
int sizer;
fscanf(file, "%d", &size);
return size;
}
int main()
{
int i = 0, j = 0, k = 0,a=0;
FILE *fp;
if ((fp = fopen("matrix.txt", "r")) == NULL)
{
printf("Error: file pointer is null.\n");
return 1;
}
int size = arrsize(fp);
printf("Array size is %d x %d \n", size, size);
double **array = (double **)malloc(size * sizeof(double *));
for (i; i < size; i++)
array[i] = (double *)malloc(size * sizeof(double));
for (i; i < size; i++)
{
for (j = 0; j < size; j++)
{
fscanf(fp, " %lf", &array[i][j]);
printf(" %lf ",array[i][j]);
}
}
for (k ; k < size; k++) {
free(array[k]);
}
free(array);
fclose(fp);
return 0;
}
【问题讨论】:
-
int sizer;-->int size; -
for (i; i < size; i++) { for (j = 0; j < size; j++)-->for (i = 0; i < size; i++) { for (j = 0; j < size; j++) -
您没有展示您正在阅读的数据文件的一个小示例,也没有展示您的实际或预期输出。这些是 MCVE (minimal reproducible example) 的重要组成部分。
-
您可能应该在打印矩阵的每一行后添加一个换行符。读取整个矩阵然后将整个矩阵打印为两组单独的循环也是一个更严格的测试。许多程序出错的原因是,虽然在读取后立即打印了值,但输入完成后该值不再正确。
-
@BLUEPIXY:我同意循环中的更改是可取的。但是,这并不是绝对必要的,因为
int i = 0, …确实将i初始化为0。