Anzeige:
Ergebnis 1 bis 2 von 2

Thema: C - glibc detected - malloc() memory corruption

  1. #1
    joker1025
    Gast

    C - glibc detected - malloc() memory corruption

    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.


    Code:
                  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
    Geändert von joker1025 (28-04-2008 um 16:14 Uhr)

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo.

    Warum allozierst du denn in jedem Schleifendurchlauf neuen Speicher für sndstr, die Größe ist doch konstant (d.h. es würde genügen, in jedem Schritt das Nullbyte an den Index 0 zu schreiben)? Außerdem gibst du den Speicherbereich von pnam frei und greifst im nächsten Schleifendurchlauf wieder drauf zu, das ist böse. Die Datei (auf die du zugreifst) ist übrigens auch im nächsten Durchlauf schon zu

    Also erstmal die Fehler ausbessern und dann nochmal probieren. Falls der Fehler schon beim 0. Durchlauf aufgetreten ist, dann ist vermutlich bereits vor dem Codeabschnitt etwas in der Speicherverwaltung durcheinander gekommen. Hier würde es sich anbieten, den Speicher mit gdb bzw. ddd oder valgrind zu beobachten.

    Gruß, Florian
    Geändert von ContainerDriver (28-04-2008 um 17:52 Uhr)
    Ein gebrechlich Wesen ist der X-Server.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •