Bitte um Auffrischung in Sachen dynamische Arrays :D
-
So, hallo mal wieder. Ich habe zu lange nichts mehr geschrieben und neulich an etwas älterem herumgebastelt. Nachdem sich das Programm mit einem Anwendungsfehler bedankt hat, habe ich die betreffende Klasse also mal auf ein Minimum reduziert und gemerkt, das ich scheinbar unfähig im Umgang mit dynamischen Arrays sein muss.
class test { public: test(int dimension=5) { LINKAGE = new int[dimension]; this->dimension = dimension; counter=0; } ~test() { delete[] LINKAGE; } void sort() { // Sorting, stark verkürzt :D int AL, BL; for(int i=(counter-1); i>0; i--) { for(int k=0; k<i; k++) { AL = LINKAGE[k]; BL = LINKAGE[k+1]; if (LINKAGE[k]>LINKAGE[k+1]) { LINKAGE[k]=BL; LINKAGE[k+1]=AL; } } } } int push (const int linkage) { checksize(); counter++; LINKAGE[counter]=linkage; // <- das kann doch nicht stimmen? return 0; } private: int checksize() { // Vergrößern... if(dimension==counter) { int new_size=(dimension + 5); int tmp_linkage[dimension]; for(int j=0; j<dimension;j++) { tmp_linkage[j]=LINKAGE[j]; } delete[] LINKAGE; *LINKAGE = 0; LINKAGE = new int[new_size]; for(int j=0; j<dimension;j++) { LINKAGE[j] = tmp_linkage[j]; } return 1; } else return 0; } int counter; int *LINKAGE; int dimension; }; main () { test irgendwas; irgendwas.push(1); irgendwas.push(2); irgendwas.push(3); irgendwas.push(4); irgendwas.push(-1); irgendwas.push(6); irgendwas.sort(); }Nun, die Zeiger zeigen scheinbar irgendwo hin

Könnte mir jemand sagen, wie ich denn LINKAGE korrekt mit Werten füllen müsste?
mfg,
BloodLord
-
Nabend,
dein Array ist nicht gross genug, du schreibst ueber die Arraygrenze hinaus und
dann bekommste nen segfault.Du muesstest dein Array vergroessern, wenn counter = dimension-1 ist. Oder du
nutzt std::vector ;).gruss
v R
-
Sind auch noch andere Fehler im Code. Du inkrementirst den Counter z.B. zweimal in Push.
grüße
-
Ah, der Hauptfehler lag in einer anderen Methode wie ich gesehn hab (unberücksichtigte Ausnahme)
Aber das mit counter = dimension-1 sehe ich nicht ganz ein. Sieht man mal von dem
counter++ Doppler ab, zählt counter die Zahlen, die in LINKAGE abgelegt wurden, wobei ja erst ab 1 losgezählt wird. Wurden also schon [dimension] Elemente abgelegt - LINKAGE[0...4] - muss LINKAGE vergrößert werden. 
Oder du nutzt std::vector ;).
hm... nein

-
Gehs nochmal im Kopf durch, dann wirst du feststellen das du viel zu oft inkrementierst.