1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Visual C++ Heap problem

Discussion in 'Programmieren' started by wirbelsturm, Apr 3, 2009.

Thread Status:
Not open for further replies.
  1. wirbelsturm

    wirbelsturm Kbyte

    Hallo zusammen
    Ich programmiere seit kurzem C++. Nun habe ich ein problem mit dem löschen von Arrays im Heap mit Visual C++ 2008 Express. Wenn ich Platz im Heap reserviere, jedoch nicht auf diesen zugreife, und dann wieder freigebe bekomme ich keine Fehlermeldung. Wenn ich aber genau gleich und gleich viel Platz im Heap reserviere, aber auf diesen zugreife, bekomme ich beim löschen eine Fehlermeldung(diese ist auf dem Bild abgebildet). Das ganze funktioniert aber ohne Probleme in wxdev-c++.
    Code:
    //Funktioniert ohne Problemme
    short* zahlen;
    zahlen = new short[3];
    delete [] zahlen;
    Code:
    //Gibt Probleme (aber nur in Visual C++ und nicht in wxdev-c++)
    short* zahlen;
    zahlen = new short[3];
    *zahlen = 1;
    zahlen[1] = 2;
    zahlen[2] = 3;
    zahlen[3] = 4;
    delete [] zahlen; //Hier kommt die Fehlermeldung
    Ich hoffe ihr könnt mir helfen.
     

    Attached Files:

  2. daboom

    daboom Megabyte

    Zumindest in Deinem geposteten Beispiel willst Du außerhalb der Arraygrenze schreiben. Der Fehler sollte also genau eine Zeile vorher auftreten.

    Du deklarierst "zahlen" also short-Array der Größe "3", schreibts aber vier Zahlen rein (1, 2, 3, 4). Das heißt der höchste zugreifbare Index wäre hier "2", weil er nullbasiert gezählt wird.

    Der Ausdruck "*zahlen" ist ja gleichbedeutend mit "zahlen[0]".
     
  3. wirbelsturm

    wirbelsturm Kbyte

    @daboom Tatsächlich wenn ich zahlen = new short[4] deklariere funktioniert es. Hätte mir aber auch schon früher in den sinn kommen können:dumm:. War es dann in Visual basic dass man bei zahl[4] 5 Elemente speichern konnte? Und sollte wxdev-c++ nicht auch einen Fehler angeben?
    Jedenfalls vielen Dank für die Hilfe bei diesem (wahrscheinlich typischen Anfänger-) Fehler.
     
  4. daboom

    daboom Megabyte

    Nein, in Visual Basic ist das auch nicht so. Da fängt standardmßig, soweit ich mich erinnere, der Arrayindex halt bei "1" an.

    Dass wxdev da keinen Fehler produziert hat liegt vermutlich daran, wo der Linker nachher Dein Array im Datensegment anordnet. Je nachdem, was dann danach kommt, schreibst Du dann halt da einfach rein.

    Vielleicht hängt VS08 aber auch lediglich mehr Debuginformationen in das Programm, so dass solche "offenbar ungewollten" Zugriffe erkannt und als Fehler gemeldet werden können.
     
Thread Status:
Not open for further replies.

Share This Page