Pourquoi dois-je obtenir un SIGABRT ici?

J'ai ce code segment dans lequel je suis à l'ouverture/fermeture d'un fichier d'un certain nombre de fois (dans une boucle):

for(i=1;i<max;i++)
     {
       /* other code */
       plot_file=fopen("all_fitness.out","w");
       for (j=0;j<pop_size;j++)
         fprintf(plot_file, "%lf %lf\n",oldpop[i].xreal[0],oldpop[i].obj);
       fclose(plot_file);
      /*other code*/
     }

- Je obtenir un SIGABRT ici, à la suite de backtrace:

#0  0x001fc422 in __kernel_vsyscall ()
#1  0x002274d1 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2  0x0022a932 in *__GI_abort () at abort.c:92
#3  0x0025dee5 in __libc_message (do_abort=2, fmt=0x321578 "*** glibc detected *** %s: %s: 0x%s ***\n")
    at ../sysdeps/unix/sysv/linux/libc_fatal.c:189
#4  0x00267ff1 in malloc_printerr (action=<value optimized out>, str=0x6 <Address 0x6 out of bounds>, ptr=0x8055a60) at malloc.c:6217
#5  0x002696f2 in _int_free (av=<value optimized out>, p=<value optimized out>) at malloc.c:4750
#6  0x0026c7cd in *__GI___libc_free (mem=0x8055a60) at malloc.c:3716
#7  0x0025850a in _IO_new_fclose (fp=0x8055a60) at iofclose.c:88
#8  0x0804b9c0 in main () at ga.c:1100

Le numéro de la ligne 1100, est la ligne où je suis en train de faire la fclose() dans le code ci-dessus segment. Quelle est la raison de ce comportement? Tous les pointeurs est apprécié.

(Je suis sur Linux et utilisant gcc)

Vous utilisez le même, j'ai à la fois de vos boucles, est-ce intentionnel?
Merci pour le tuyau. C'était une erreur dans la question de l'affichage. Il fixe.
C'est quoi l'malloc_printerr message? Êtes-vous sûr que la fonction fclose() est à l'origine de l'accident? Je pense que vous devriez réduire votre code pour exactement la partie qui provoque le problème et après que...
Eh bien, comme les traces de spectacles, le crash a été causé à la ligne 1100, ce qui est mon fclose (), si je supprime cette ligne, il fonctionne très bien.
Qu'advient-il si vous déplacez le fopen avant le premier (celui avec i) et la fonction fclose après? La façon dont cela est maintenant votre all_fitness.fichier sera écrasé à chaque itération i, qui n'est pas ce que vous voulez, je suppose?

OriginalL'auteur | 2010-02-25