[C] Programmabbruch bei free()

mc_gulasch

Erfahrenes Mitglied
Hallo zusammen,

ich hab ein relativ großes und komplexes Programm vor mir, welches Stringverarbeitung
macht.
Bei einer bestimmten Kombination von Strings, hab ich das Problem, dass das Konstrukt
C:
checksum = (int*) calloc(strlen(string)+1,sizeof(int));
mittels free() nicht mehr freigegeben werden kann. MSVC++ bricht mit der Meldung

Code:
Debug Error!
Programm: *meins*
DAMAGE: after normal block (#5455) at 0x0073BFC0

Den Code des ges. Projekts zu posten macht wenig Sinn und wenn es ne Speicher-G´schicht ist (wonach es für mich aussieht :confused:) , dann wirds (zumindest für mich) auch schwierig das entscheidende zu posten.
Kann mir jemand sagen, woran das liegen könnte, bzw. wie ich am besten beim Debuggen vorgehe. Was natürlich auch ganz wunderbar wäre :rolleyes: wenn mir jemand erklärt wie man Kontrollfunktionen für die Speicherverwaltung schreibt, da ich auf dem Gebiet die letzte Krücke bin.

Danke euch, wenn euch was unklar ist oder ich noch was posten soll, bitte Bescheid sagen.

Danke sagt schonmal das Gulasch!


//EDIT:
Der Debugger nach dem "Retry" sagt:
Code:
Info: User breakpoint called from Code at 0x40705f
geht dann in die Datei "DBGHEAP.C"
in diesen Abschnitt:
C:
if (!(_crtDbgFlag & _CRTDBG_CHECK_ALWAYS_DF))
        {
            /* check no-mans-land gaps */
            if (!CheckBytes(pHead->gap, _bNoMansLandFill, nNoMansLandSize))
                _RPT3(_CRT_ERROR, "DAMAGE: before %hs block (#%d) at 0x%08X.\n",
                    szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
                    pHead->lRequest,
                    (BYTE *) pbData(pHead));

            if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize))
                _RPT3(_CRT_ERROR, "DAMAGE: after %hs block (#%d) at 0x%08X.\n",
                    szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
                    pHead->lRequest,
                    (BYTE *) pbData(pHead)); //<-----Hier ist laut Debugger der Fehler (Line 1067)
        }

EDIT2//
Ich glaube es hat sich erledigt. Ich hab auf dieser Seite nen guten Hinweis gefunden und scheinbar hab ich wohl tatsächlich einen auf n Zeichen angelegten String mit mehr als n Zeichen gefüllt, was dann schließlich den Speicher geschmissen hat. Hoffe mal das wars.
Jetzt hab ich zwar nen neuen Fehler, aber an ner komplett anderen Stelle ;) Wünscht mir Glück, ich mach hier mal dicht.
 
Zuletzt bearbeitet:
Zurück