Strukturfeld als referenzieller Parameter



  • Hallo!

    ich probiere jetzt schon seit langer Zeit. Ich moechte ein das tun, was im Titel steht. Hier mein Code:

    // das ist mein Strukturfeld
    point* bitmapLine;
    ...
    // das wird initialisiert
    point* bitmapLine = new point[MAXLINELENGTH];
    
    // line() bekommt bitmapLine als Referenz, damit ich Werte da rein kopieren kann
    line ((int)x, (int)y, x + rx2, y + ry2, &bitmapLine);
    
    // in line() erstelle ich buffer array p
    void MCLControl::line( const int x1, const int y1, const int x2, const
    int y2, point** bL) {
    ...
           point* p = new point[MAXLINELENGTH];
    
    // und fuelle es
    ...
       for( int i = 0; i != dx; i += sdx ) {
               p[c].x = i + x1;
               p[c].y = m * i + y1;
               if (c == MAXLINELENGTH) { break; } else { c++; }
    ...
       for( int i = 0; i != dy; i += sdy ) {
               p[c].x = m * i + x1;
               p[c].y = i + y1;
               if (c == MAXLINELENGTH) { break; } else { c++; }
           }
     }
    
    // jetzt kopiere ich es in meinen referenz - Parameter
      memcpy(bL, &p, sizeof(point) * MAXLINELENGTH);
    // und da gibts nen seg. fault
    

    Ich habe auch schon versucht in line() mit

    bl[c]->x = ...
    

    versucht, ging aber irgendwie nicht.

    Wenn ich bitmapLine als point**, also als Zeiger auf ein Array, deklariere, kann ich es nicht mit point** bitmapLine initialisieren. Und jetzt weiss ich nicht, was ich noch machen kann. Es muss doch eine Moeglichkeit geben, dass eine Funktion ein Feld von struct's fuellt!

    viele Gruesse,
    Earl



  • memcpy geht nur eine Indirektionsebene nach "oben", d.h. mit deinem Aufruf kopierst du den Inhalt der Variable p auf bitmapline (bzw. bei deinen Größenangaben auch noch massenhaft Mülldaten in den Bereich hinter bitmapline). Richtig wäre

    memcpy(*bL,p,sizeof(point)*MAXLINELENGTH);
    

Anmelden zum Antworten