私は正常に動作する C プログラムを持っていますが、約 1 週間実行すると、常に segfault のように見えます。-g でコンパイルし、gdb で実行すると、次のコードを指しているように見えます。
メインループで関数を呼び出します(実際には、クラッシュする理由を試してデバッグします)
char config_debug[10];
次に、conf ファイルを読み取り、その中の現在の設定に基づいて、config_debug を true に設定します。
次に、私のプログラムでこれを呼び出します:
(312行目):
debug("send off data",config_debug);
これは機能です:
int debug(char *debug_info, char *config_debug)
{
chomp(config_debug);
if ( strcmp(config_debug,"true") == 0 )
{
FILE *fp;
fp=fopen("/tmp/debug.log", "a");
(55行目):
fprintf(fp, debug_info);
fprintf(fp, "\n");
fclose(fp);
}
return 0;
}
void chomp(char *s) {
while(*s && *s != '\n' && *s != '\r') s++;
*s = 0;
}
上記の2つの機能に何か問題があると思いますか?
これが役立つ場合のトレースは次のとおりです。
Program terminated with signal 11, Segmentation fault.
#0 0xb6d7a67c in vfprintf () from /lib/arm-linux-gnueabihf/libc.so.6 (gdb) bt
#0 0xb6d7a67c in vfprintf () from /lib/arm-linux-gnueabihf/libc.so.6
#1 0xb6d83cd8 in fprintf () from /lib/arm-linux-gnueabihf/libc.so.6
#2 0x0000a848 in debug (debug_info=0xc304 "send off data", config_debug=0xbec0cb5c "true") at station.c:55
#3 0x0000b614 in main (argc=1, argv=0xbec0cd94) at station.c:312