2010-09-11 67 views
0

(這是在ffmpeg-devel列表中提出的,但是計算方式偏離主題,所以在此張貼)。由於fopen()導致的C分段錯誤。如何追蹤和尋找什麼?

ffmpeg.c加載多個.c,它們使用log.c的av_log - > av_log_default_callback函數,它使用fputs;

void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) 
{ 
... 
snprintf(line, sizeof(line), "[%s @ %p] ", (*parent)->item_name(parent), parent); 
... call to colored_fputs 

屏幕輸出:

static void colored_fputs(int level, const char *str){ 

... 
fputs(str, stderr); 

// this causes sigsegv just by fopen() 
FILE * xFile; 
xFile = fopen('yarr', 'w'); 
//fputs(str, xFile);fclose(xFile); // compile me. BOOM! 
av_free(xFile); // last idea that came, using local free() version to avoid re-creatio 

每一次,當的fopen投入代碼,它給出的不明原因的分段錯誤。爲什麼這種事情可能發生在這裏?也許是由於阻止了主I/O?

什麼是在這種情況下應該調查的一般「阻滯劑」? Pthreads(涉及代碼的地方)?

+1

你是不是想在'fopen'調用中使用雙引號而不是單引號?這段代碼是否編譯? – jamesdlin 2010-09-11 01:12:37

回答

4

的fopen採用字符串作爲參數,你給它字符文字

xFile = fopen('yarr', 'w'); 

應該

xFile = fopen("yarr", "w"); 
if(xFile == NULL) { 
    perror("fopen failed"); 
    return; 
} 

編譯器應該警告這一點,所以請確保您開啓警告標誌(請記住閱讀並修正它們)

+0

謝謝,它很簡單,幾乎忘了:) – 2010-09-11 01:26:09