Malloc-Fehler: falsche Prüfsumme für befreite Objekt

Arbeite ich an der Implementierung Schwanz für eine Zuordnung. Habe ich es richtig funktioniert aber ich scheine immer einen Fehler aus frei zu zufälligen Zeiten.

Kann ich nicht sehen, es aufspüren, um ein Muster oder etwas anderes, es ist konsistent.

Zum Beispiel, wenn ich rufe mein Programm als "Schwanz -24 test.in" ich würde die die die falsche checksum error in der gleichen Zeile auf mehreren läuft. Jedoch mit verschiedenen Dateien und auch eine unterschiedliche Anzahl von Zeilen zu drucken, zurück, ich werde wieder kommen ohne Fehler.

Irgendeine Idee, wie man auf die Spur das Problem, ich habe versucht zu Debuggen Sie es für Stunden, ohne Erfolg.

Ist hier der problematische code:

Linien ist definiert als char** und war malloc als:

lines = (char**) malloc(nlines * sizeof(char *));

void insert_line(char *s, int len){

  printf("\t\tLine Number: %d Putting a %d line into slot: %d\n",processed,len,slot);
  if(processed > numlines -1){//clean up
    free(*(lines+slot));
    *(lines + slot) = NULL;
  }
  *(lines + slot) = (char *) malloc(len * sizeof(char));
  if(*(lines + slot) == NULL) exit(EXIT_FAILURE);
  strcpy(*(lines+slot),s);
  slot = ++processed % numlines;
}
  • ist slot 0 oder 1 basiert? slot überschreitet nie zzeile-1, richtig?
  • rechts das Modul automatisch bekommen es wieder um 0
  • Dem compiler und dem debugger benutzt du? Je nachdem sind Sie in der Lage sein könnte, um etwas Hilfe bei der Fehlerbehebung Ihr problem.
  • Ich würde vorschlagen, anstelle der original-malloc Zeile mit Zeilen = (char **) calloc(zzeile, sizeof(char *)); Der Vorteil von calloc ist, dass der Speicher genullt, so dass Sie beginnen mit alle NULL-Zeiger.
InformationsquelleAutor None | 2008-10-24
Schreibe einen Kommentar