Initialisierung eines Array schlägt fehl
-
Wie war jetzt nochmal genau der Fehler?
Was ist ein CPU-Fenster?!In der Funktion NewSize löscht Du das alte Array. Im Default-Konstruktor von DynArray wird str.array aber nicht inisialisiert -> Du löscht irgendwas, was Dir nicht gehört. Dazu liest Du im zweiten Kopiervorgang in temp ein Element zu viel.
Achja, Du kannst Zeiger auch herumschubsen. Überleg mal ob Du in NewSize das ganze Array wirklich zweimal kopieren musst.
Noch ein Punkt: Debugger. Der springt im Zweifel sogar an die Stelle des Absturzes, so dass Du vage Angaben wie "ich sehe nur ein CPU-Fenster, aber keinen Fehler" präzisieren könntest.
-
Hallo zusammen
@LordJaxom: Du hast mir den entscheidenen Tipp gegeben. Ich darf nicht den Standartkonstruktor verwenden, denn sonst ist das Array nicht initilisiert. Wenn ich jedoch folgendes schreibesum[arrc]= new DynArray <int> (5);dann tritt der Fehler wieder sehr früh auf. Die 5 ist einfach so gewählt. Wenn ich jedoch das schreibe
sum[arrc]= new DynArray <int> (500);dann ist der Fehler bei mir noch nicht aufgetreten. Ich verstehe dieses verhalten nicht. Es scheint davon abzuhängen, wieviele Arrays zu Beginn initilisiert werden. Wenn ich aber irgendwann mal mit riesigen Zahlen arbeite, dann weiß ich nicht, ob die 500 noch "reicht". Wie kann man dieses Verhalten erklären und den Fehler ein für alle entfernen.
Ich verwende den C++ Builder 6 als IDE. Dort öffnet sich ein Fenster mit der Überschrift "CPU" und mir werden irgendwelche Hexadezimal Zahlen angezeigt. Ich weiß ja selber nicht was das ist, aber eine präzise Fehlermeldung gibt es nicht.
Vielen, vielen Dank
lg, frealC++
-
Hast Du den anderen Hinweis (im Array temp eins zuviel gelesen) auch verfolgt?
Das CPU-Fenster im Borland Builder deutet darauf hin, dass der den Absturz erkennt und versucht, Dir die genaueren Umstände mitzuteilen. An dieser Stelle kannst Du normalerweise über "Aufruflisten" oder "Stacktraces" auch an die Stelle im Programm gelangen, die den Absturz verursacht. Das wäre jedenfalls bei anderen IDEs üblich. Wie das genau bei Borland funktioniert, kann ich Dir aber nicht sagen, da ich Borland nicht verwende.
-
int dif=end-i+1;
Notfalls hilf Dir durch Einsetzen kleinstmöglicher Zahlen.
z.B. 1 für i und 2 für end.
dif = 2-1+1; macht 2!
Ist das wirklich die Differenz zwischen 2 und 1?Manchmal hat man einfach ein dämliches Grundproblem zu kapieren, daß man 23 Stück Brot kriegt, wenn man 22 mal schneidet - oder so

-
Hallo,
stimmt, daran habe ich noch gar nicht gedacht. Ich werde mir das nochmal genauer angucken!! Dankelg, freakC++
-
Halte durch - nur Fehler bringen einen wirklich voran
