2010-09-11 5 views
0

(ceci a été demandé sur la liste de ffmpeg-devel, mais compté de façon hors-sujet, en l'affichant ici). Ffmpeg.c charge plusieurs fichiers .c, qui utilisent la fonction av_log -> av_log_default_callback de log.c, qui utilise fputs;Erreurs de segmentation C dues à fopen(). Comment tracer et quoi chercher?

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 

sortie de l'écran:

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 

Chaque fois, quand fopen est mis en code, il donne une erreur de segmentation de la raison inconnue. Pourquoi ce genre de chose peut-il arriver ici? Peut-être en raison du blocage des E/S principales? Quels sont les «bloqueurs» généraux qui devraient être étudiés dans une telle situation? Pthreads (impliqué dans le code quelque part)?

+1

Vouliez-vous utiliser des guillemets au lieu de guillemets simples dans l'appel 'fopen'? Ce code a-t-il été compilé? – jamesdlin

Répondre

4

fopen prend des chaînes comme arguments, vous donnant l'omble littéraux

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

devrait être

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

Le compilateur aurait dû avertir à ce sujet, alors assurez-vous que vous avez activé drapeaux d'avertissement (rappelez-vous de les lire et de les corriger)

+0

Merci, c'était si simple que presque oublié :) –