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'dKann 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.