将文件数据读入2d数组时的EXC_BAD_ACCESS

时间:2012-05-03 11:38:32

标签: c++ ios c xcode exc-bad-access

我正在尝试将filedata加载到2d数组中,但是在调用fread时我收到了EXC_BAD_ACCESS错误。

这就是我尝试阅读文件的方式:

char data[21][23];
FILE* file = fopen("1.txt", "r");
fread(data, 1, sizeof(data), file); // EXC_BAD_ACCESS

1 个答案:

答案 0 :(得分:1)

在C中,二维数组(nxm)表示为n个指针的数组,指向n个大小为m的数组。

fread将读入给定指针指向的内存区域。

在你的情况下,fread会将数据写入应该存储n个指针的位置。你不能简单地在C中的二维数组上使用fread()或任何类似的方法。

相反,首先读入大小为m * n的1维数组,然后将指向“行首”的指针复制到指针数组中:

char tmp[21*23];
FILE* file = fopen("1.txt", "r");
fread(tmp, 1, sizeof(tmp), file);
char* data[21];
int i;
for(i = 0; i < sizeof(data)/sizeof(char*); i++) {
    data[i] = &tmp[23*i];
}

更新:示例代码包含错误(我使用了sizeof(数据),在64位系统上,它将返回所需值的8倍,从而导致另一个EXC_BAD_ACCESS;))

相关问题