写入文件时出现分段错误
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);
}
编辑:程序 运行s 直到 "printf("LINE 17 CLEAR");"然后它在下面的行中给我一个 'EXC-BAD-ACCESS' 错误。
EDIT1:修复了两个不同的路径
EDIT2:为第二个 fopen(...)
语句添加了错误检查。
此外,请随时对任何样式错误和我 should/should 没有做的事情发表评论。谢谢
我敢打赌它只会在您第一次 运行 时发生。原因是第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,
argv=0x00007fff5fbffc60) + 109 在 test.c:11
第 6 帧:0x00007fff8f9c95fd libdyld.dylib`start + 1
...如果您查看第 5 帧,您会看到有问题的代码行。
更新后的代码功能齐全***
我是 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);
}
编辑:程序 运行s 直到 "printf("LINE 17 CLEAR");"然后它在下面的行中给我一个 'EXC-BAD-ACCESS' 错误。
EDIT1:修复了两个不同的路径
EDIT2:为第二个 fopen(...)
语句添加了错误检查。
此外,请随时对任何样式错误和我 should/should 没有做的事情发表评论。谢谢
我敢打赌它只会在您第一次 运行 时发生。原因是第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,
argv=0x00007fff5fbffc60) + 109 在 test.c:11 第 6 帧:0x00007fff8f9c95fd libdyld.dylib`start + 1
...如果您查看第 5 帧,您会看到有问题的代码行。