Komischer Fehler (Steh ich jetzt aufm Schlauch???)
-
würdest aber nicht bei 0 anfangen ...
=>m_pplTimeMatrix= new T*[m_iSize]; for (unsigned short time_x = 0; time_x < m_iSize; ++time_x) { m_pplTimeMatrix[time_x] = new T[m_iSize], for (unsigned short time_y = 0; time_y < m_iSize; ++time_y) m_pplTimeMatrix[time_x][time_y] = NULL; }und schon sollte das gehen

-
gut aber ich dachte das i wird erst nach der Iteration (Nach den Anweisungen i, for- Schleifen Block erhöht??
d.h.:
for (int i = 0; i < m_iSize; ++i){ m_pplTimeMatrix[i] = new T[m_iSize]; .... }verhält sich anders als:
for (int i = 0; i < m_iSize;m_pplTimeMatrix[i] = new T[m_iSize], ++i){ .... }aber wieso?
-
BorisDieKlinge schrieb:
gut aber ich dachte das i wird erst nach der Iteration (Nach den Anweisungen i, for- Schleifen Block erhöht??
d.h.:
for (int i = 0; i < m_iSize; ++i){ m_pplTimeMatrix[i] = new T[m_iSize]; .... }verhält sich anders als:
for (int i = 0; i < m_iSize;m_pplTimeMatrix[i] = new T[m_iSize], ++i){ .... }Ja was dachtest Du denn?
a) Du hast festgestellt: i wird erst nach dem Schleifendurchlauf erhöht
b) im ersten Beispiel machst Du new explizit am Anfang des Durchlaufs
c) im zweiten Beispiel machst Du new in einer Kommaliste zusammen mit ++i, welches am Ende des Durchlaufs ausgeführt wirdWann wird nun new im Fall c) durchgeführt? (Tipp: Unmittelbar vor ++i).
-
hmm ok.. dann müsste die ganze Geschichte gehen wenn ich das "new..." und "i++" vertausche?
for (int i = 0; i < m_iSize;, ++i,m_pplTimeMatrix[i] = new T[m_iSize]){ .... }
-
btw, kann sein das das nur mir so geht aber ich finde das fällt unter Mißbrauch einer for-Schleife

die new-Anweisung in der inkrement-bedingung gehört da imho einfach nciht hin. Das führt nur zu Problemen, vor allem weil sich die schleife hier unerwartet verhält.
Normalerweile wenn ich eine Schleife im Stil for (i=0; i<5; ++i) baue, dann erwarte ich als gültige werte 0,1,2,3,4 . Ich würde also auch erwartem das in dem Beispiel m_pplTimeMatrix[] von 0 bis 4 initialisiert wird.
Jedoch genau das ist nciht der Fall, denn die Iteration wird ja am Ende der for-schleife durchgeführt _vor_ der Abbruchbedingung. Demnach werden bei diesem Schleifenkonstrukt am ende m_pplTimeMatrix[] von 0 bis 5 initialisiert sein. (Mal davon ausgehend das dieses Konstrukt überhaupt richtig funktioniert).
Allein deswegen würde ich schon dringend von solchen "Ich bin cooler" Konstrukten abraten. was ist denn falsch an einer schönen, einfachen Schleife wie dieser:
[cpp]
for (int i = 0; i < m_iSize; ++i){
m_pplTimeMatrix[i] = new T[m_iSize];
....
}
[/code]Mal davon abgesehen das man nur eine Zeile hat in der new steht und nicht zwei.
-
BorisDieKlinge schrieb:
hmm ok.. dann müsste die ganze Geschichte gehen wenn ich das "new..." und "i++" vertausche?
for (int i = 0; i < m_iSize;, ++i,m_pplTimeMatrix[i] = new T[m_iSize]){ .... }Muss ich jetzt allen ernstes für Dich die for-Schleife aufdröseln?
for (init; cond; cont) { ... } // entspricht init; while (cond) { ...; cont; }Die Allokation des Speichers für matrix[i] wird unmittelbar vor oder nach ++i stattfinden (je nach Reihenfolge), und damit am Ende des Schleifenkörpers. Da Du auf matrix[i] im Schleifenkörper bereits zugreifst, wird das so nicht ordentlich funktionieren können.
Davon ab halte ich es mit bloblo.
-
hmm ok .. stimmt sorry.. KLEINER Denkfehler
! Aber danke für die Aufklärung
-
BorisDieKlinge schrieb:
gut aber ich dachte das i wird erst nach der Iteration (Nach den Anweisungen i, for- Schleifen Block erhöht??...
Ein "beliebtes" Mißverständnis des Post-Operators. Der Unterschied zwischen Post- und Pre- liegt an der Reihenfolge zwischen Increment und Ergebnis-Zuweisung ! Da Du das Ergebnis von i++ gar nicht verwendest, hat das gar nichts mit der Schleife zu tun !
BorisDieKlinge schrieb:
gut aber ich dachte das i wird erst nach der Iteration (Nach den Anweisungen i, for- Schleifen Block erhöht??
d.h.:
for (int i = 0; i < m_iSize; ++i){ m_pplTimeMatrix[i] = new T[m_iSize]; .... }verhält sich anders als:
for (int i = 0; i < m_iSize;m_pplTimeMatrix[i] = new T[m_iSize], ++i){ .... }aber wieso?
Genau DAS habe ich Dir in meinem ersten Posting erklärt....
und übrigens das Verhalten der ersten Variante ist genau das, das Du haben willst und keinen Fehler verursacht.
(und sauberer ist es sowieso)BorisDieKlinge schrieb:
hmm ok.. dann müsste die ganze Geschichte gehen wenn ich das "new..." und "i++" vertausche?
for (int i = 0; i < m_iSize;, ++i,m_pplTimeMatrix[i] = new T[m_iSize]){ .... }Mal abgesehen davon, dass ich bloblo zustimme: Warum nimmst Du nicht meinen Tipp aus meinem ersten Posting an ? Warum inkrementierst Du i nicht da, wo Du es brauchst: In m_pplTimeMatrix[++i] ?
Gruß,
Simon2.
-
ok Chef;) mach ich
Danke 
-
Gern geschehen !
Good luck,
Simon2.