glibc detected - malloc() fehler



  • Hi,

    weis leider nicht mehr weiter, kann mir vlt. irgendjemand erklären warum bei diesem Programmabschnitt eine Speicherallokierung fehlschlägt? Ich habe den Fehler soweit eingegrenzt, dass der Fehler in der Zeile

    if ((neu = fopen(pnam, "w")) == NULL) ...

    auftritt, was mir allerdings unerklärlich ist, da hier nichtmal eine allokierung geschieht.

    else if (ccnt > 1)
                  {
                          sprintf(cmd,"splitflv %s %d",video, ccnt);
                          for (i=0; i<ccnt; i++)
                          {
                                  sprintf(pnam,"/tmp/SCFIFO%d\0",cnr[i]);
                                  if ((neu = fopen(pnam, "w")) == NULL)
                                  {
                                          perror("fopen");
                                          exit(1);
                                  }
                                  sndstr = malloc(407);
                                  sprintf(sndstr,"%s&part%d\0",pipbuf2,i);
                                  fputs(sndstr,neu);
                                  set_state(getmaxstate());
                                  free(sndstr);
                                  free(pnam);
                                  fclose(neu);
                         }
                  }
    

    pnam initialisierung: char *pnam = malloc(100);

    Fehlerbezeichnung:
    *** glibc detected *** malloc(): memory corruption: 0x0804d8b0 ***

    Wäre über Hilfe sehr erfreut 😕



  • ist vor der zeile
    f ((neu = fopen(pnam, "w")) == NULL) .
    die datei bereits geöffnet ?



  • joker1025 schrieb:

    pnam initialisierung: char *pnam = malloc(100);
    Fehlerbezeichnung:
    *** glibc detected *** malloc(): memory corruption: 0x0804d8b0 ***

    wahrscheinlich hat vorher schon irgendwas den heap zerbröselt, eine idexüberschreitung oder sowas, so dass nur ein nachfolgendes malloc/free/realloc diesen fehler bemerkt.
    🙂



  • Du solltest vielleicht Valgrind (oder DUMA) benutzen, um Fehler in der Speicherbenutzung zu finden. Wie *-freak schon angedeutet hat, kann ein Fehler an einer Stelle des Programms (zB doppeltes free) an einer anderen Stelle fatale Auswirkungen haben.

    Bei fopen wird wohl intern Speicher alloziert.



  • rüdiger schrieb:

    Du solltest vielleicht Valgrind (oder DUMA) benutzen, um Fehler in der Speicherbenutzung zu finden. Wie *-freak schon angedeutet hat, kann ein Fehler an einer Stelle des Programms (zB doppeltes free) an einer anderen Stelle fatale Auswirkungen haben.

    Danke, habe das Problem jetzt gelöst. Kannte das Tool valgrind vorher leider gar nicht. Habe jedenfalls damit rausgefunden, dass ich ein paar Zeilen vorher den Speicherbereich eines Strings um 6 Byte überschrieben habe.


Anmelden zum Antworten