memcpy mit zeigern?...



  • hallo leute,

    habe n code gebastelt und jetzt funzt der nicht...
    ich habe folgendes gemacht...

    --------------------------------------------------
    **Regression.h

    struct myPoint{
    double x;
    double y;
    };

    myPoint * aPoints;
    int nPoints;

    //Hinzufügen der Punkte
    int AddPoint ( double x, double y );**

    Hier habe ich eine Struktur mit einem Wertepaar x&y entworfen,
    dann zeiger auf die struktur und dann AddPoint als funktion für die speicherung.
    ---------------------------------------------------
    **Regression.cpp

    int CRegression::AddPoint (double x,double y)
    {
    myPoint *ptr = new myPoint[nPoints+1]; //Neuen Speicher für ptr holen
    if(ptr!=0)
    {
    memcpy(ptr,aPoints, sizeof(aPoints)); /Inhalt von aPoints
    in ptr (1 struct frei für x&y)
    /
    delete aPoints;

    ptr[nPoints].x=x; //Letzes struct im ptr füllen!
    ptr[nPoints].y=y;

    aPoints=ptr; //aPoints erhält adresse von ptr
    }
    else
    {
    std::cout <<
    "\n---Fehler: Speicher konnte nicht reserviert werden!---"
    << std::endl;
    exit(1);
    };
    }**

    Hier will ich zuerst dem Zeiger "ptr" dynamisch einen neuen Speicherbereich zuweisen. Und zwar immer um +1 mehr als der andere gerade hat.

    Ich kopiere dann den Inhalt von aPoints nach ptr, lösche aPoints und fülle dann die letzte stelle(+1) mit meinem x&y- wert.

    Dann weise ich wieder dem aPoints die adresse, auf die ptr zeigt, zu und fange wieder von vorne an.

    Problem:
    er bricht ständig bei memcpy ab... "speicherbereichsverletzung" sagt er.

    Was mache ich falsch, wo ist der Fehler... vielleicht die Zeiger in memcpy??

    vielen dank in voraus....



    if(ptr!=0)
    

    Bringt nichts, new liefert keinen Null-Ptr (mehr) zurück. Stattdessen fliegt eine Exception.

    delete auf ein new[] = Speicherleck

    3. Ist aPoints initalisiert?


  • Mod

    memcpy(ptr,aPoints, sizeof(aPoints));
    

    falsche Länge (die Größe des Zeigers aPoints ist unteressant). aPoints uninitialisiert oder NULL ist undefiniert.



  • aber ich habe doch aPoints in der header-datei initialisiert....

    könnte ich einen korrekten ansatz haben?...



  • dieter.g schrieb:

    könnte ich einen korrekten ansatz haben?...

    std::vector



  • Hallo

    nicht zu vergessen : sfds

    bis bald
    akari



  • dieter.g schrieb:

    aber ich habe doch aPoints in der header-datei initialisiert....

    Davon ist in deinem Code aber nichts zu sehen. Zumindest keine gültige Initialisierung ungleich Null.


Anmelden zum Antworten