Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ EXC_将文件数据读入2d数组时访问错误_C++_Ios_C_Xcode_Exc Bad Access - Fatal编程技术网

C++ EXC_将文件数据读入2d数组时访问错误

C++ EXC_将文件数据读入2d数组时访问错误,c++,ios,c,xcode,exc-bad-access,C++,Ios,C,Xcode,Exc Bad Access,我试图将文件数据加载到2d数组中,但调用fread时出现EXC_BAD_访问错误 以下是我尝试读取文件的方式: char data[21][23]; FILE* file = fopen("1.txt", "r"); fread(data, 1, sizeof(data), file); // EXC_BAD_ACCESS 在C语言中,二维数组(nxm)表示为指向大小为m的n个数组的n个指针的数组 fread将读取给定指针指向的内存区域 在您的例子中,fread将把数据写入n个指针应该存储的位

我试图将文件数据加载到2d数组中,但调用fread时出现EXC_BAD_访问错误

以下是我尝试读取文件的方式:

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

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

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

在您的例子中,fread将把数据写入n个指针应该存储的位置。在C语言中,不能简单地对二维数组使用fread()或任何类似的方法

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

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];
}
chartmp[21*23];
FILE*FILE=fopen(“1.txt”,“r”);
fread(tmp,1,sizeof(tmp),文件);
字符*数据[21];
int i;
对于(i=0;i

更新:示例代码包含一个错误(我使用了sizeof(data),在64位系统上,它将返回所需值的8倍,导致另一个EXC\u BAD\u ACCESS;)

除了一点小错误外,无法判断这里的错误。。。您可能应该使用“rb”,而不仅仅是“r”。等等,是不是
file==NULL
?用rb替换了r,似乎对问题没有任何影响。文件不为空。数据是否声明为
const
?或者,它是一个局部变量,由于嵌套函数调用和/或其他局部变量(大型数组/结构)过多,您已经耗尽了堆栈?在我提供的示例中,数据是按您所看到的定义的。可能是iOS造成的,经过一些测试后,我发现它找不到正确的文件。fread仍然存在EXC_BAD_访问错误。在做了更多的研究之后,我发现这只会发生在ios上,就像我之前推测的那样。这个答案和被删除的答案一样好。缓冲区是一维数组还是二维数组完全无关。