gpt4 book ai didi

c - 从二进制文件读取二维数组并返回该数组的指针(在C中)

转载 作者:行者123 更新时间:2023-12-03 03:30:32 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数返回从二进制文件读取的二维数组的指针。尽管我编译时没有错误,但当我尝试打印数组的元素之一时,总会出现段错误。这是我的代码:

double ** readArray(int rows, int cols)
{
int i;
double **myArray=malloc(rows*sizeof(double*));
if (myArray){
for (i=0; i < rows; i++)
{
myArray[i]=malloc(cols*sizeof(double));
}
}

FILE *data;
data=fopen("matrix.bin", "rb");
fread(myArray,sizeof(double),rows*cols,data);

return myArray;
}

int main ()
{
int cols = 7;
int rows = 15;
double **myArray=readArray(rows, cols);
printf("%f\n", myArray[1][0]);
return 0;
}

最佳答案

问题是您的代码中没有二维数组。指针到指针查找表并不是一个二维数组。它是分散在堆上随机位置的段数[行]。因此它也不必要地缓慢。

此外,您应该将内存分配和算法分开。

做这样的事情:

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

void* allocArray (int rows, int cols)
{
return malloc( sizeof(double[rows][cols]) ); // allocate 1 2D-array
}

void readArray (int rows, int cols, double array[rows][cols])
{
FILE *data;
data=fopen("matrix.bin", "rb");
fread(array, sizeof(double[rows][cols]), 1, data); // read 1 2D-array
}

int main ()
{
int cols = 7;
int rows = 15;
double (*myArray)[cols] = allocArray(rows, cols);

readArray(rows, cols, myArray);

printf("%f\n", myArray[1][0]);

free(myArray); // free 1 2D-array
return 0;
}

使用特殊声明 double (*myArray)[cols] 而不是更符合逻辑的 double (*myArray)[rows][cols] 的原因是我们希望避免不方便的数组指针取消引用语法。 (*myArray)[1][0] 不容易阅读。因此,不要声明指向 2D 数组的数组指针,而是声明指向 1D 数组的数组指针,然后在该数组指针上使用指针索引。对于任何指针,any_pointer[n] 给出指向的项编号 n。数组指针没有区别,所以你得到一维数组编号n。

关于c - 从二进制文件读取二维数组并返回该数组的指针(在C中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35599371/

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