打开、读取和打印二维数组! (我的代码有什么问题?)
Open, Read and Print a 2D Array! (What's wrong with my code?)
首先我使用 malloc 保留一些内存(文件有一个 [1024][1024] 数组),然后我使用 fopen 打开文件。然后我试图将文件读入保留内存 space。为了查看我是否正确阅读它,我尝试打印数组,但编译代码后得到的是:
"Process returned -1073741819 (0xC0000005) execution time : 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 的类型无效。
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 调用的 return 值。
首先我使用 malloc 保留一些内存(文件有一个 [1024][1024] 数组),然后我使用 fopen 打开文件。然后我试图将文件读入保留内存 space。为了查看我是否正确阅读它,我尝试打印数组,但编译代码后得到的是: "Process returned -1073741819 (0xC0000005) execution time : 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 的类型无效。
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 调用的 return 值。