Problem bei Zuweisung
-
ja, n und k sind vorher 0 und i ist die Zählvariable einer äußeren Schleife.
im übrigen passiert dasselbe auch in einer anderen Version:
for(n;n<hoehe;n++) {actual_column_p[n]=pData[n+hoehe*i]; actual_column_t[n]=tData[n+hoehe*i]; }wenn ich mit dem Debugger die Variablen beobachte, haben pData und tData die korrekten Werte und an actual_column_p wird auch etwas zugewiesen, aber an actual_column_t nicht.
-
Was heißt denn "funktioniert nicht"? Gibt's eine Exception? Oder behält das jeweilige Array-Element einfach seinen ursprünglichen Wert? Hast du in dem Fall überprüft, ob der zuzuweisende Wert auch vernünftig ist und vom Ziel-Element abweicht?
-
Bist Du sicher dass n (und k) wirklich 0 sind? Nicht nur im Debugging Mode?
for(n;n<hoehe;n++) { /* .. */ } // fettgedrucktes n bewirkt nichts
for(n=0;n<hoehe;n++) { /* .. */ } // fettgedrucktes n wird 0 gesetzt
Simon
-
Naja, aber warum funktioniert dann die erste zuweisung und die zweite nicht?
@matze: "funktioniert nicht" bedeutet hier, dass der Debugger für actual_column_t nur die speicheradresse des arrays anzeigt und ansonsten steht nichts drinnen, wenn ich versuche, es mit cout auszugeben, sehe ich nichts am bildschirm!
-
Naja, aber warum funktioniert dann die erste zuweisung und die zweite nicht?
Welche erste Zuweisung?
-
Isomorphismus schrieb:
wenn ich versuche, es mit cout auszugeben, sehe ich nichts am bildschirm!
Dann machst Du irgendwas bei der Ausgabe falsch. Sowohl ein Zeiger als auch ein double haben immer irgendeinen Wert. Es kann also eigentlich nicht sein, dass Du ein double mit cout ausgibst, und nichts siehst. Du siehst mindestens eine Null.
-
Isomorphismus schrieb:
Naja, aber warum funktioniert dann die erste zuweisung und die zweite nicht?
@matze: "funktioniert nicht" bedeutet hier, dass der Debugger für actual_column_t nur die speicheradresse des arrays anzeigt und ansonsten steht nichts drinnen, wenn ich versuche, es mit cout auszugeben, sehe ich nichts am bildschirm!
Zeig doch bitte mal den ganzen relevanten Code (mindestens mit Deklaration und Zuweisung von n und k und der cout-Ausgabe). Dann kommt man dem Fehler vielleicht eher auf die Schliche.
-
int i=0,n=0,k=0,j=0; //Zählvariablen int hoehe=99; int erster_Aufruf; // double* actual_column_t=new double[hoehe]; double* actual_column_p=new double[hoehe]; double* actual_column_xNe=new double[hoehe]; int durchlauf=tatsarrg/99; // wie oft schleife durchlaufen werden muss if(!actual_column_t) crash( "#calculating_xNe", "failed to allocate memory for actual_column_t"); if(!actual_column_p) crash( "#calculating_xNe", "failed to allocate memory for actual_column_p"); for(i;i<durchlauf;i++) //hier sind jetzt immer 99 daten da {if(!i) erster_Aufruf= 0; else erster_Aufruf= 1; for(n;n<hoehe;n++) {actual_column_t[n]=tData[n+hoehe*i]; //hier wird von float auf double gecastet actual_column_p[n]=pData[n+hoehe*i]; } if(i==1) cout<<"bin zum 2 mal hier"<<endl; ELECTRO1(&hoehe, actual_column_t, actual_column_p, &erster_Aufruf, actual_column_xNe); xNeData=new float[dims[0]*dims[1]*dims[2]]; for(j;j<hoehe;j++) xNeData[j+hoehe*i]=actual_column_xNe[j]; //xNeData ist global, alle columns nur lokal in dieser Methode cout<<"i: "<<i<<endl; } //jetzt berechne säule mit restlichen Daten int rest=tatsarrg-99*durchlauf; if(!rest) return; for(int l=0;l<rest;l++) {actual_column_t[l]=tData[l+99*durchlauf]; actual_column_p[l]=pData[l+99*durchlauf]; } ELECTRO1(&hoehe, actual_column_t, actual_column_p, &erster_Aufruf, actual_column_xNe); for(int s=0;s<hoehe;s++) xNeData[s+99*durchlauf]=actual_column_xNe[s]; //xNeData ist global, alle columns nur lokal in dieser Methodeso, das ist der ganze code. ich habe zwei große arrays tData und pData und will immer Teile herausnehmen, und mit denen dann rechnen (in der routine electro1) und diese routine gibt mir dann die antwort in einem weiteren array, nämlich xNeData zurück. tatsarrg ist die tatsächliche arraygröße, wieviele werte drinnen stehen.
lg, Iso
-
müsstest Du n nicht zurücksetzten?
Ansonsten wird die innere for Schleife nur einmal durchlaufen.
Bei j tritt doch daselbe Problem auf.Warum deklarierst Du die Schleifen Variablem eigentlich am Anfang der Funktion und nicht so spät wie möglich?
Grüsse Simon
-
die schleifenvariablen waren es, danke!
ich wusste, es musste ein blöder Fehler sein..

thx!
-
Wir haben ja auch nur dreimal drauf hingewiesen
