Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktionen von dynamisch erzeugten Objekten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.07.2008, 17:09 Uhr
0xdeadbeef
Gott
(Operator)


Der Zeiger wird by-value übergeben, das heißt, das Objekt, auf das E in main zeigt, wird zwar gelöscht, aber E in main wird nicht dadurch geändert, dass E in unity geändert wird - denn E in unity ist nur eine Kopie von E in main. Wenn du das auf diese Art machen willst, musst du den Zeiger per Referenz übergeben:

C++:
void unity(sp_matrix *&E, int matrix_dim) {


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2008, 18:46 Uhr
~ulfenstein
Gast


Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: