Hi!
Eine Sache, die mir auffällt ist, daß der neue Wert des Zeigers nicht zurückkommt.
char \*pChr = malloc(4711);
GetMsg(pChr);
// pChr zeigt noch an die gleiche Stelle, der Speicher ist
// aber in der Funktion freigegeben worden, realloc()
// liefert möglicherweise einen ganz anderen Zeiger zurück
// Also ist pChr möglicherweise ungültig.
GetMsg(pChr); // Geht schief, aber eigentlich schon im realloc() ?!
Das realloc() in der Funktion gibt im ersten Aufruf den Speicher frei, auf den pChr zeigt. Der neue Zeiger kann ganz woanders hin zeigen, wird aber nur in der Funktion in der lokalen Variablen „pBuffer“ gespeichert. D.h. nach dem Ende der Funktion ist der Wert futsch und Du weißt nicht mehr, wo Dein Speicherbereich eigentlich steckt.
Was sonst noch?
Ach ja, Deine Fehlermeldung sagt „Error in DLL Function“. Die alloc()-Funktionen greifen auf den Heap zu, der von der C-Runtime-Library verwaltet wird. Ich bin mir nicht sicher, ob nicht EXEs und DLLs unterschiedliche Heaps verwenden. D.h. wenn Du ein malloc() in der EXE machst und ein realloc() in der DLL, könnte es auch *puff* machen.
Und schlußendlich berichtet Microsoft noch von einem Bug bei mehrfachen ReAllocs von kleinen Speicherbereichen in der C-RTL bei Visual C++ 6.0:
http://support.microsoft.com/support/kb/articles/Q22…
Gruß, Ralf