zugriff auf Klassenelement so nicht möglich?



  • Hallo,

    ich habe eine structure:

    Class UFF
    {
           int* a;
           int len;
           ...
    };
    

    Ich initialisiere meine klasse so:

    void 
    Class::New_UFF(UFF *is, 
    			int		len)
    {
    	is->a = NULL;
    	is->len = len;
    	is->a = new int[len];
    }
    

    So, jetzt würde ich gerne aus einem anderen array die daten in das array des klassenobjektes a speichern:

    int len = 2;
    int*a = new int [len];
    a[0] = 9;
    a[1] = 8;
    
    UFF* uff = NULL;
    
    uff = New_UFF(len);
    
    memcpy(uff->idcs, a, 2 * sizeof(int));
    

    Aber hier gibts nen seg-fault und mein valgrind schreit mit:

    Invalid read of size 4
    Address 0x0 is not stack'd, malloc'd or (recently) free'd
    

    Kann mir jemand sagen warum? Könnte es sein dass uff->idcs kein Pointer ist? Oder so?



  • Ach mist,

    sorry, ich habe falsch die methoden gepostet, so sollte es sein:

    void 
    UFF::Init_UFF(	UFF *is, 
    			int		len)
    {
    	is->a = NULL;
    	is->len = len;
    	is->a = new int[len];
    }
    
    UFF*
    UFF::New_UFF(int length)
    {
    	UFF *is;
    	is = new UFF::UFF();
    
    	Init_UFF(is, length);
    
    	return is;
    }
    

    und der Aufruf soll so sein - verursacht aber einen segfault:

    int len = 2;
    int*a = new int [len];
    a[0] = 9;
    a[1] = 8;
    
    UFF* uff = NULL;
    
    uff = New_UFF(len);
    
    memcpy(uff->idcs, a, 2 * sizeof(int));
    


  • mist - ich registrier mich das nächste mal.

    der aufruf von memcpy steht bei mir so:

    memcpy(uff->a, a, 2 * sizeof(int));
    

    so gehts aber nicht - immer segfault



  • Hi,

    sorry, aber mir scheint, dass Du bei dem ganzen noch ziemlich viel durcheinanderwirfst.
    Zum Initialisieren ist der Konstruktor einer Klasse da. Hier also:

    class UFF {
       int* a;   
    public:
       UFF(size_t l) : a(new int[l]), len(l) {} // Im Konstruktor (hier InitLeiste)
       ~UFF() { delete[] a; }
    };
    
    int main() {
       UFF uff(2);
       return 0;
    }
    

    In Deine Code legst Du nie ein UFF-Objekt an !!

    Noch besser allerdings:

    int main() {
       vector<int> uff(2);
       uff[0] = 9;
       uff[0] = 10;
       return 0;
    }
    

    Gruß,

    Simon2.


Anmelden zum Antworten