Problem mit Memorymanagement new und delete
-
Unter Overflow versteh ich dass es so gerade möglich ist, je nach 32/64 bit Betriebssystem eine gewisse Anzahl an Werten zu speichern, bis dann "core dumped" erscheint
-
Weil du exakt 0 Byte Speicher reservierst, aber in die 0 Byte was reinstecken willst. Und eine Liste implementiert man gewoehnlich durch Verkettung, nur so als Tipp...
Ausserdem fehlt bei dir operator <</>>
-
@ Bashar versteh ich das richtig. Das der Core Dump nichts mit den Delete operatoren (löschen die so alles vollständig?)
sondern mit dieser Geschichtezahlen = new int[max]; // new int[0]: Null Elemente im Array zahlen[max] = value; // zahlen[0] gibt es also nicht => Crash cout << zahlen[0]; max++;zusammenhängen?
-
Wenn du nix reserviert hast, schreibst du irgendwo hin. Das kann noch gut gehen (ist nur Undefined Behavior, theoretisch kann alles passieren). Nur irgendwann triffst du halt einen Speicherbereich, wo es dem Betriebssystem nicht mehr so gefaellt, dass du da einfach ohne zu fragen hin schreibst. Und dann krachts.
Und wie gesagt: Das ist keine Liste.
-
Jannik schrieb:
Naja wir sollen ja auch eine Klasse mit dem Namen Liste erstellen
Nach meiner Erfahrung soll eine Klasse mit Namen Liste auch eine Liste implementieren. Wie es in deinem Kurs aussieht, kann ich natürlich nicht beurteilen ...
-
Anscheinend habe ich hier einen Fehler gemacht, leider seh ich ihn noch nicht um ehrlich zu sein.
zahlen2 = new int [max]; // Hier wird ein neues Array erstellt mit "max" Anzahl an Feldern zahlen[max] = value;// Hier setze ich den Wert Value in den Array an der Stelle Max als der größtmöglichenDas sind meine Gedanken dahinter, kann mir das wer erklären?
Vielen Dank für das Feedback!
-
Spielt das eine Rolle? Das ist ein eindeutiger Fehler, der oft gerne zu einem Programmabsturz führt. Ich würde sagen, dass die Hypothese, dass das hier auch der Fall ist, nicht ganz von der Hand zu weisen ist. Um das zu überprüfen, würde ich den Fehler also erstmal beseitigen und dann weiter sehen. Wahrscheinlich wirst du dann feststellen, dass deine ursprüngliche Hypothese sich in Luft auflöst.
-
Jannik schrieb:
zahlen2 = new int [max]; // Hier wird ein neues Array erstellt mit "max" Anzahl an Feldern (ja, wuerde es, waere max nicht 0) zahlen[max] = value;// Hier setze ich den Wert Value in den Array an der Stelle Max als der größtmöglichen (selbst wenn max nicht 0 waere und ueberhaupt was reserviert waere, laege zahlen[max] schon wieder in nicht reserviertem Terrain)P.S.: Aktivier mal Code-Tags
-
Jannik schrieb:
Anscheinend habe ich hier einen Fehler gemacht, leider seh ich ihn noch nicht um ehrlich zu sein.
zahlen2 = new int [max]; // Hier wird ein neues Array erstellt mit "max" Anzahl an Feldern zahlen[max] = value;// Hier setze ich den Wert Value in den Array an der Stelle Max als der größtmöglichenDas sind meine Gedanken dahinter, kann mir das wer erklären?
Ja, der Fehler ist, dass Arrays mit 0, ..., max-1 indiziert werden. Dein Zugriff
zahlen[max]greift also über das Arrayende hinaus.BTW du solltest dir mal Gedanken über die Bedeutung deiner Variablen machen. Bei "max" würde ich erwarten, dass das der maximale gültige Index ist. Aber anfangs ist max=0, und 0 ist da noch kein gültiger Index.
-
Ich werds angehen, bemerkenswert dass mir der Core immer nach 4 Eingaben dumped. Bei einem "undefinierten" Fehler.
Mit den Listen bin ich hiermit auf dem richtigen Weg http://www.cplusplus.com/reference/list/list/?kw=list right?
-
Jannik schrieb:
Mit den Listen bin ich hiermit auf dem richtigen Weg http://www.cplusplus.com/reference/list/list/?kw=list right?
Das ist eine Implementierung eines Liste. Wenn du das meinst ...