Debug / Release Umschaltungs Probleme bei VC++5.0!

Hallo,

folgender Code wird im Release Modus nicht korrekt abgearbeitet:

int iLen;
iLen = Data.GetLength();
char * pbuf;
pbuf= (char *) malloc(iLen); //Wird im Release Modus nicht
//ausgeführt!!!

Data.Read(pbuf, strlen(pbuf));
iLen = strlen(pbuf);

Im Debug Modus ist iLen=8237, im Release iLen=1. Die Zeile mit dem Malloc Befehl wird nicht im Release Modus ausgeführt. Diese wurde von mir nicht expliziet mit ASSERT ausgeklammert.

Was mache ich falsch?

Bin dankbar für jeden kleinen Hinweis!

Ciao
Catmad

Hast du Internet Explorer 5.5 ?
Hi Catmad :smile:

Im Debug Modus ist iLen=8237, im Release iLen=1.

VC legt ja für Debug- und Release-Versionen jeweils extra Unterverzeichnisse, namens debug und release an. Kann es sein, dass die Arbeitsdatei in beiden Verzeichnissen unterschiedlich ist?

Die Zeile mit dem Malloc Befehl wird nicht im Release Modus
ausgeführt.

Aha! Probleme mit malloc und Co hatte ich auch, allerdings mit Visual C++ 6.0 (Service Pack 3). Es stellte sich heraus, dass ich selber Schuld war: Ich habe den Internet Explorer 5.5 installiert! Dieser fummelt naturgemäß extrem viel an deinen Systemdateien rum. Er ersetzt u.a. auch die Datei „ntdll.dll“ durch eine neuere Version (habe Windows 2000). Genau in dieser bleiben malloc() und Genossen hängen. Ich habe dann wieder von Explorer 5.5 auf Explorer 5.01 gewechselt und alles ist wieder gut :smile:

Irgendso etwas muss es sein, denn ich finde in deinem Source keinen Bug!

cu Stefan.

bist du sicher?
Ich habe auch Win2000 und IE5.5 drauf.
Bist du dir sicher dass Microsoft so einen krassen Bug eingebaut hat? kanns mir kaum vorstellen :wink: und mir sind bisher auch noch keine Probleme mit irgendwelcher Software aufgetreten.

MfG Bruno

Hi Bruno :smile:

Ich kann nur berichten, was ich beobachtet habe. Die Kombination Win 2000, IE 5.5 und VC 6.0(3) verträgt sich nicht sonderlich gut. Ich hatte im normalen Betrieb auch keine Probleme, aber beim Programmieren. Als ich F7 gedrückt hatte, speicherte VC den Code zwar ab, aber manchmal hängte es sich beim anschließenden Compilieren auf. Dann kamen die Probleme mit meinen eigenen Programmen hinzu, immer bei malloc() bzw. bei new. Der Fehler trat ausschließlich im Debug-Modus und stets in der Datei „ntdll.dll“ auf. Danach war VC so „durcheinander“, dass es auch keine Release-Version mehr vernünftig compilierte (ich musste VC neu starten). Seitdem ich wieder auf IE5 zurückgegangen bin, sind auch die malloc()-Probleme behoben :smile:

Der Verdacht liegt also nahe, dass es der IE5.5 war :smile:)) Ich warte jetzt auf das erste Service Release von 5.5 und versuche es dann nochmal …

cu Stefan.

Hi Catmad,Stefan

Einen kleinen Bug vielleicht schon. strlen(pbuf) sucht so lang nach einer terminierenden Null, bis sie auftritt. Nach dem malloc() ist der Speicher nicht gerade sauber, den man bekommt. Zumindest erklärt das mir die unterschiedlichen Zahlen. Daß der malloc nicht funktionieren kann, ist mir allerdings neu… sollte man mal ein bisschen nach den Umständen forschen. In jedem Fall sollte man nicht auf uninitialisiertem Speicher herumschreiben und den Pointer nicht prüfen :wink:

die Sequenz

if(pBuf)
{
Data.Read(pBuf,iLen);
iLen = strlen(pbuf);
}

sollte andere Ergebnisse liefern …

Gruß Patrick

1 Like

Hi Patrick :smile:))

Einen kleinen Bug vielleicht schon. strlen(pbuf) sucht so lang
nach einer terminierenden Null, bis sie auftritt.

Sehr gut! Das habe ich übersehen! *MussIchWohl3PunkteVergeben*

Hinter dem malloc() habe ich nicht mehr richtig geschaut, weil es ja hieß, dass malloc() nicht korrekt ausgeführt wird :smile:

Zumindest erklärt das mir die unterschiedlichen Zahlen.

Das ist sicherlich der Grund :smile:

Daß der malloc nicht funktionieren kann, ist mir
allerdings neu… sollte man mal ein bisschen nach den
Umständen forschen.

Ich hatte, wie gesagt, ein ähnliches Problem, nachdem ich IE 5.5 installiert hatte.

In jedem Fall sollte man nicht auf uninitialisiertem Speicher
herumschreiben und den Pointer nicht prüfen :wink:

Nunja, so weit waren wir ja nun nicht mal gekommen :smile:))

cu Stefan.