Xcode错误:“EXC_BAD_ACCESS”

时间:2012-02-03 19:34:10

标签: c++ c xcode macos file

我正在尝试在Xcode中编译和运行测试C程序。该程序从文本文件中读取5个符号并将其关闭。程序构建成功,但是当我尝试运行程序时,我收到错误:GDB:程序收到信号:fclose(in)周围的“EXC_BAD_ACCESS”。

#include <iostream>
#include <unistd.h>

int main (int argc, const char * argv[])
{
    bool b;
    char inpath[PATH_MAX];
    printf("Enter input file path :\r\n");
    std::cin >> inpath;
    FILE *in = fopen(inpath, "r+w");
    char buf[5];
    fread(&buf,sizeof(buf),5,in);
    printf(buf);
    fclose(in);
    return 0;
}

这可能是什么原因?

3 个答案:

答案 0 :(得分:3)

啊! sizeof(buf)将返回5,因此您要求在5字节缓冲区中使用25个字节。这会覆盖自动存储和clobbers in

当然,请注意fprint(buf)将尝试打印一个没有终止空值的缓冲区,因此它将在读取结束之后打印垃圾。

答案 1 :(得分:2)

该行

fread(&buf,sizeof(buf),5,in);

错误:请仔细阅读man page of fread(并记住sizeof(buf)将是整个buf数组的大小。

该行

 printf(buf);

错了。如果例如buf包含%d

,则行为未定义

您肯定应该学习使用调试器(并使用编译器启用所有警告)。

答案 2 :(得分:2)

fread(&buf,sizeof(buf),5,in);

这表示您想要阅读buf 5次,这是不正确的。

第二个和第三个参数告诉fread您想要阅读的每个元素的大小以及元素的数量。