簡體   English   中英

寫入文件時出現分段錯誤

[英]Segmentation fault when writing to a file

更新后的代碼功能齊全***

我是 C/C++ 的新手,我寫了一段代碼,通過每次將“count”寫入文件來計算程序運行的次數。 除了當我嘗試運行它時遇到段錯誤錯誤。 誰能告訴我為什么?

#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(...)語句添加了錯誤檢查。

另外,請隨時對任何樣式錯誤和我應該/不應該做的事情發表評論。 謝謝。

我敢打賭它只會在您第一次運行時發生。 原因是第 11 行:

11 fprintf(fp, 0);

您基本上是向 fprintf 傳遞一個空指針。 你可能想要做的是:

11 fprintf(fp, "0");

這是我想出來的方法。 我用調試信息編譯它並使用調試器運行它...... lldb,准確地說:

(lldb) bt * thread #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, 

argv=0x00007fff5fbffc60) + 109 at test.c:11 frame #6: 0x00007fff8f9c95fd libdyld.dylib`start + 1

...如果您查看第 5 幀,您將看到有問題的代碼行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM