【问题标题】:Open, Read and Print a 2D Array! (What's wrong with my code?)打开、读取和打印二维数组! (我的代码有什么问题?)
【发布时间】:2020-01-31 20:01:31
【问题描述】:

首先我使用 malloc 保留一些内存(文件有一个 [1024][1024] 数组),然后我使用 fopen 打开文件。然后我试图将文件读入保留的内存空间。要查看我是否正确阅读它,我正在尝试打印数组,但编译代码后得到的是: “进程返回 -1073741819 (0xC0000005) 执行时间:1.779 s” 按任意键继续。

有什么建议吗?

{

int **A = malloc(sizeof(double[1024][1024]));

FILE *matrizA = fopen("A_1024.dat", "rb");

for(int z = 0; z < 1048576; z++) {
    fread(&A, sizeof(double),1,matrizA);
}

fclose(matrizA);

for (int i = 0; i < 1024; i++) {
    for (int j = 0; j < 1024; j++) {
        printf( "%f ", A[i][j]);
    }
}

free(A);

}

【问题讨论】:

  • 为什么每次都跑进&A?
  • 我不知道,我只是想在 A 中引入数组的值

标签: c multidimensional-array fopen fread reinterpret-cast


【解决方案1】:

这个声明是错误的,因为指针A的类型无效。

int **A = malloc(sizeof(double[1024][1024]));

你必须写

double ( *A )[1024] = malloc(sizeof(double[1024][1024]));

这个循环

for(int z = 0; z < 1048576; z++) {
    fread(&A, sizeof(double),1,matrizA);
}

也是错误的。你可以写

for( size_t i = 0; i < 1048576; i++) {
    fread( ( double * )A + i, sizeof(double),1,matrizA);
}

我假设该文件恰好包含 1048576 个双精度数。否则必须检查 fread 调用的返回值。

【讨论】:

  • @PabloCorreaChandía 有一个错字。查看我更新的帖子。
  • 谢谢!现在它至少在打印一些东西,但它充满了 0 :(
  • @PabloCorreaChandía 检查数据是否确实以二进制格式写入并且大小相等。
  • @PabloCorreaChandía 在文本模式下?
  • 我想是的,我有一个 .txt 文件,其中包含每个数字例如:99.888927
猜你喜欢
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多