000
21.07.2003, 17:44 Uhr
~xodiak
Gast
|
Hallo Leute!
Ich habe eine Frage bezüglich einer von mir geschriebenen Funktion. Kann mir jemand nen Tipp geben, was an dieser Funktion schief laufen könnte? Irgendwann bricht mir mein Programm (nach ungefähr dem 2000. ten Durchlauf mit einem Fehler in malloc.c in Zeile 3049 raus. Ich komm mit dem gdb aber nicht drauf :( Jeden Speicherbereich den ich mir irgendwo mit malloc hol, geb ich mit free auch wieder (genau einmal!) frei, sobald ich ihn nicht mehr benutze.
Die Funktion getvalue gibt einen char * zurück. FALSE ist auf 0 und TRUE auf 1 mittels enum definiert. LINESIZE ist 300, das ist absolut ausreichend. insertillegal gibt nix zurück und funktioniert auch tadellos. Ein Compilieren mit -Wall hilft auch nicht (Zeigt nix an). Ich benutze SuSe 8.0 mit gcc 2.95.2 und gdb 4.18.
Dankeschön schonmal fürs durchlesen.
C++: |
void check_legal(char *tname, char *dname, float size, int count, int cut) {
char *buffer = malloc(LINESIZE), *buffer2 = dname + cut; char x = FALSE; printf("check_legal %ld\n", ++counter);
strcpy(buffer, getvalue(tname, "legaldir")); if(strcmp(getvalue("global", "legaldir"),getvalue(tname, "legaldir")) != 0) sprintf(buffer, "%s;%s", buffer, getvalue("global", "legaldir")); buffer = strtok(buffer, ";\r\n"); if(strncmp(buffer2, "/", 1) == 0) buffer2++; while(buffer != NULL && strcmp(buffer2, "") != 0) { if(strcmp(buffer2, buffer) == 0) { x = TRUE; break; } buffer = strtok(NULL, ";\r\n"); } if(!x) insert_illegal(size, dname, count); free(buffer); printf("check_legal Ende\n"); return; }
|
--edit: cpp-tags. Das könntet ihr übrigens ruhig mal selbst machen. Dieser Post wurde am 21.07.2003 um 17:47 Uhr von 0xdeadbeef editiert. |