写入文件时出现分段错误

时间:2017-02-10 21:04:52

标签: c++ segmentation-fault file-writing

更新代码全功能***

我是C / C ++的新手,我编写了一段代码,通过每次将'count'写入文件来计算程序运行的次数。除了我尝试运行它时遇到seg错误错误。任何人都可以告诉我为什么?

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

int main(int argc, const char * argv[]) {
    FILE *fp;
    printf("LINE 13 CLEAR");
    fp = fopen("MyPlayground.rtf", "r");
    int value;
    fscanf(fp, "%d", &value);
    printf("Value is %d", value);
    //printf("LINE 14 CLEAR");
    if(fp== NULL)
    {
        printf("LINE 17 CLEAR");
        if(fopen("MyPlayground.rtf", "w")==NULL)
        {
            exit(0);
        }
        //fprintf(fp,"%d",0);
        fclose(fp);
        return 0;
    }
    //printf("LINE 25 CLEAR");
    fp = fopen("MyPlayground.rtf", "w");
    //printf("LINE 30 CLEAR");
    fprintf(fp,"%d",++value);
    fclose(fp);
}

编辑:程序一直运行到“printf(”LINE 17 CLEAR“);”之后它在下一行中给了我一个'EXC-BAD-ACCESS'错误。

EDIT1:修复了两条不同的路径

EDIT2:添加了第二个fopen(...)语句的错误检查。

另外,请随意评论任何样式错误以及我应该/不应该做的事情。感谢。

1 个答案:

答案 0 :(得分:3)

我打赌它只会在你第一次运行时发生。原因是第11行:

11 fprintf(fp,0);

您基本上是将fprintf传递给空指针。你可能想要做的是:

11 fprintf(fp,“0”);

以下是我弄清楚的方法。我使用调试信息编译它并使用调试器... lldb运行它,确切地说:

(lldb)bt *线程#1:tid = 0xacaaf,0x00007fff90f4dcf6 libsystem_c.dylib __vfprintf + 327, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0) * frame #0: 0x00007fff90f4dcf6 libsystem_c.dylib __ vfprintf + 327

frame #1: 0x00007fff90f762e7 libsystem_c.dylib`__v2printf + 471

frame #2: 0x00007fff90f766bc libsystem_c.dylib`__xvprintf + 633

frame #3: 0x00007fff90f4db36 libsystem_c.dylib`vfprintf_l + 54

frame #4: 0x00007fff90f4669b libsystem_c.dylib`fprintf + 186

frame #5: 0x0000000100000e9d test.out`main(argc=1, 
在test.c:11处

argv = 0x00007fff5fbffc60)+ 109     帧#6:0x00007fff8f9c95fd libdyld.dylib`start + 1

...如果你看第5帧,你会看到令人讨厌的代码行。