2009-06-02 12 views
0

J'ai copié ce code à partir de l'exemple libjpeg et je lui ai transmis les fichiers standard; Il a pour résultat un pointeur de fichier qui ne contient aucune information et donc interrompt la dernière ligne avec des violations d'accès. Des idées?C++ fopen retourne un fichier * avec <bad ptr>

EDIT: Sur les conseils de Tobias, fopen semble ouvrir le fichier mais le fichier jpeg_read_header échoue à son tour avec la violation d'accès.

EDIT: Après un peu plus creuser
JPEG support with ijg - getting access violation

+1

Etes-vous sûr que le reste du code n'est pas en cause, et que le fichier contient ce que vous pensez qu'il fait? –

+0

Je ne suis toujours pas clair. Est-ce que fopen() renvoie le code ci-dessus NULL ou non? –

+0

si sourceFile! = NULL, puis fopen réussi. Pourriez-vous essayer de lire à partir de sourceFile pour exclure la partie fopen (par exemple en utilisant fgetc). –

Répondre

1

"select isn't broken".

Si fopen a renvoyé un pointeur de fichier valide et que jpeg_read_header ne peut pas l'utiliser, quelqu'un entre ces deux instructions a fait quelque chose de mal.

Le seul interlignaire est l'appel jpg_stdio_src, qui n'échouera pas si toutes ses conditions préalables sont remplies.

Bottom line: voir pourquoi jpg_stdio_src échoue. Ma conjecture: il doit être construit en utilisant la macro jpeg_create_decompress.

2

Utilisez strerror ou perror pour obtenir raison exacte:

FILE *soureFile; 
if ((soureFile = fopen(sourceFilename, "rb")) == NULL) 
{ 
    perror("fopen failed"); 
    exit(1); 
} 
+0

Je ne connaissais pas ces remerciements. Cependant, étant donné que le pointeur valide est le retour de fopen, cette ligne ne sera jamais touchée. –

+1

Donc, en fait, fopen() fonctionne et le problème est avec votre code jpeg! –

+0

Je pense que ce que veut dire Adam, c'est que le pointeur 'fopen' renvoie est valide et pointe vers un' struct' valide mais les données dans le 'struct' sont invalides. Je viens de rencontrer ce problème et par conséquent cette question. Pour plus de clarté, le débogueur peut accéder aux variables dans la valeur retournée: '_ptr',' _base' et '_tmpfname' sont tous des pointeurs invalides. Ce qu'on nous dit quand on regarde la documentation de 'fopen', c'est que si le fichier ne s'ouvre pas,' NULL' sera retourné. Ce n'est pas le cas ici. – Samaursa

Questions connexes