Problem mit dynamischen Objekten
-
Hey,
hab ein Problem mit dynamischen Objekten:
In einem meiner Projekte möchte ich innerhalb einer Methode
einer Klasse zwei dynamische Objekte hintereinander deklarieren.Bsp:
char* test1 = new char[5]; int* test2 = new int[10];
Das problem ist folgendes:
Dem ersten Objekt wird wie gewöhnlich eine korrekte Adresse zugewiesen,
das zweite Objekte kriegt ne 0-Adresse und kann somit nicht
benutzt werden. Jedes weitere Objekt bekommt ne komplett ungültige
Adresse (0xcdcdcd oder so was).
Hab bisher alle Ideen ausgeschöpft und keine Ahnung mehr, wär dankbar
für nen helfenden Rat.
Norman
-
versuch das mal auf ein vollständiges, kleines programm zu reproduzieren.. So alleine wie's da steht müsste schon der Compiler 'ne Macke haben.
-
hm, geht der new-operator nicht nur mit objekten, aso klassen???
für sowas würd ich malloc nehmen...
-
hi
LUZA schrieb:
hm, geht der new-operator nicht nur mit objekten, aso klassen???
für sowas würd ich malloc nehmen...
schwachsinn mit New kannst du alles allocieren. Malloc ist eine C-Funktion und würde ich nicht benutzten wenn du in c++ programmierst.
Werden keine Exceptions geworfen?
-
Das der Compiler ne Macke hat kann ich mal ausschließen,
weil das Problem nur bei diesem Projekt auftritt. Wenn ich ein
anderes Projekt habe, kann ich so viele Objekte nacheinander
erstellen, wie ich will. Ich hab bereits alle Projektdateien
gelöscht und nur die Codes gelassen und darauf basierend
ein neues Projekt erstellt (weil ich dachte, dass die Projekt-
dateien fehlerhaft sind). Hat nichts genützt.
Na ja und wenn ich innerhalb dieser
Klasse meine Objekte im Konstruktor initialisieren lasse,
kriegen alle beide eine korrekte Adresse. Aber das ist doch
keine Lösung, ich will das nicht den Konstruktor machen
lassen ;-), das soll ja eben dynamisch innerhalb meiner
Methode ablaufen...
-
hallo
leider bleibt das so alles nur auf christallkugelebene.
ohne den konkreten code, der nicht geht, in gut und einfach abgespeckter weise ist es schwer zu verstehen, was das problem ist.
so long
-
Der Code ist total simpel, da gibt es nix besonderes.
Einfach mein Projekt und eine Methode. Nehmen wir z.B.
folgendes:MyClass::Function(int length) { char* string = new char[length]; int* dynamic_int = new int[10]; strcpy("Hallo", string); dynamic_int = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; }
Ein einfaches Beispiel in einer Methode.
In den String kann geschrieben werden, der Debugger zeigt mir
eine korrekte Adresse. "dynamic_int" dagegen erhält, so sagt
es mir der Debugger, eine 0-Adresse (0x0000000). Das heißt,
dass ich in den Integer nicht schreiben kann (Hab das Beispiel
jetzt nicht getestet, aber so ähnlich sieht meine Funktion
auch aus...)
-
die zuweisung an dynamic_int geht so nicht.
-
müsste doch mit dem ficken-operator klappen die zuweisung
-
Vielleicht hift dir ja ein Anfänger-Tutorial weiter. Auch wenn der Compiler
nicht meckert, heisst das nicht das du alles richtig gemacht hast.
Welchen Compiler verwendest du eigentlich ? Dein Konstrukt mit dem Array
kann ich unter VC6 garnicht erst kompilieren.strcpy("Hallo", string);
Entweder hast du die Dokumentation nicht gelesen oder du machst absichtlich
Unsinn. Das du den Inhalt von string in ein String-Literal kopieren willst
ist ja hoffentlich nicht dein Ernst.
Ausserdem ist der Bezeichner "string" denkbar ungeeignet, siehe std::string.dynamic_int = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Auf diese Weise initialisiert man einen Array aber ne Zuweisung geht so nicht.
mfg JJ
-
Mister Nutz schrieb:
müsste doch mit dem ficken-operator klappen die zuweisung
Hi. Du meinst doch sicher den Do-What-I-Mean operator oder?? operator ficken?? hmmmm
-
Ich sagte bereits dass ich den Code nicht getestet hab
und mir war klar, dass da Fehler drin sind. das
mit dem strcpy(...) muss halt vertauscht werden, so einfach
ist das.
Ich benutze MSVC++ 7...
Ihr wolltet halt ein Code-Beispiel, um die Situation zu
vedeutlichen und in meinem Original-quellcode gibt es
soweit keine Fehler. Früher hat mein Code ohne Probleme
funktioniert und auf einmal gings nicht mehr, obwohl ich
dieses spezielle Klasse nicht verändert hab.. Hab aber den
Fehler nicht ausmachen können.
-
Wie schon gesagt, deinem beiden Codezeilen die du uns freundlicherweise gezeigt
hast sind fehlerhaft. Wenn du weitere Fragen hast, tja dann musst du auch Input
liefern.mfg JJ