【发布时间】:2016-02-24 10:23:05
【问题描述】:
我正在尝试编写一个函数,该函数返回从二进制文件读取的二维数组的指针。虽然我编译没有错误,但当我尝试打印数组的元素之一时,总是会出现分段错误。这是我的代码:
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;
}
【问题讨论】:
-
你忘了
free()你malloc()'ed -
myArray不是一个连续的内存区域,您进行的每个分配都可以返回一个指向可用空间中任何位置的指针。参见例如this old answer of mine 用于数组数组和指向指针“矩阵”的指针之间的区别。 -
查看C FAQ section 6.16 并使用第二种方法来连续分配内存。如果您可以确保内存是连续的,您可以像您的代码一样使用
fread()读取整个文件。但也可以考虑使用mmap()