000
19.07.2008, 17:00 Uhr
ulfenstein
|
Hallo, ich habe ein Problem mit einer Funktion (hier unity), die als Argument einen Pointer auf ein dynamisch alloktiertes Objekt nimmt. Da die Größe des Objekts sich während des Funktionaufrufs ändern kann, lösche ich das alte und erzeuge ein neues Objekt der Größe L.
C++: |
class sp_matrix { public: sp_matrix(int reserve_length); ~sp_matrix(); void add_element(int m, int n, double val); void disp_matrix(); void full_disp_matrix(); void info(); void copy_matrix_to(sp_matrix *A); void set_to_unity(int dim); double *A_val; bool is_sorted; int *m; int *n; int dim1; int dim2; int L; int reserved_length; };
void unity(sp_matrix* E, int matrix_dim) { delete E; E= new sp_matrix(matrix_dim); for(int c=0; c<matrix_dim; c++) { E->A_val[c]=1.0; E->m[c]=c; E->n[c]=c; } E->L=matrix_dim; E->dim1=matrix_dim; E->dim2=matrix_dim; E->is_sorted=1; }
int main() { int L=100; sp_matrix *E = new sp_matrix(1); unity(E, L); int x=E->dim1; return 0; }
|
Nun mein Problem: nach dem Funktionsaufruf in unity(E,L) in main, ist meine Variable x nicht 100, wie ich es erwartet hätte. Wenn ich am Ende IN der Funktion unity den Wert von E->dim1 checke, ist er sehr wohl 100. Wie kann das sein, wenn ich das Objekt nur per Pointer übergebe? Es scheint sich auch die Adresse von dem int E->dim1 innerhalb der Funktion unity und danach in main dem E->dim1 zu ändern. Für jegliche Hinweise wäre ich sehr Dankbar.
Vielen Dank und Grüße, Ulf
Bearbeitung von 0xdeadbeef: |
cpp-tags eingefügt. Nächstes mal selbst machen.
|
Dieser Post wurde am 19.07.2008 um 17:02 Uhr von 0xdeadbeef editiert. |