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


Anmelden zum Antworten