Pointer-Adresse duplizieren ? calloc(..) ?

MortenV

Mitglied
Hi,
ich erhalte einen long Wert eines Bildes, welcher zwar noch kein Pointer ist aber später als Pointer gecastet wird:
Code:
long ptr=NULL;
ptr = m_pView->m_cView.GetImagePtr();

Anschließend nutze ich diesen ptr um ein eigenes Bildformat mit Daten zu füllen:
Code:
SetData(m_pCurrImg,(void*)ptr,stride);

Wenn ich nun das Bild, welches als Datum den Pointer enthält, bearbeite, ändert sich auch das Originalbild.
Wie kann ich die Daten des Originalbildes retten, sodass ich nie die Originaldaten manipuliere ?
Mein Ansatz: Neuen Speicher via calloc anlegen um somit Daten duplizieren zu können.. funktioniert so aber nicht:

Code:
    long ptr=NULL;
    ptr = m_pView->m_cView.GetImagePtr(1);

    double BuffSize = sizeof(ptr);
    long* Buff = (long*)calloc(BuffSize, 1);
    Buff=&ptr;

Idden ?

Danke, Gruß Morten
 
Mit Deinem sizeof-Aufruf bekommst du nur die Größe des Zeigers (hier eine long int Variable, als 4 Byte). Du müßtest Dir die Größe des Buffers von
m_pView->m_cView geben lassen. Da ich jetzt nicht weiß, von welchem Datentyp das ist, kann ich Dir leider nicht sagen, wie.
 
Hi.

Du mußt erstmal die Größe des Puffers bestimmen. Der sizeof Operator liefert zur Kompilierzeit die Größe der Variablen oder des Typs welcher als Argument übergeben wurde. Du übergibst da eine long Variable und sizeof liefert dann z.B. 4 oder 8 als Ergebnis zurück.

Die Größe des Puffers müßtest du von dem m_cView Objekt bekommen können - was immer das ist.

Wenn du die Größe bestimmt hast, kannst du neuen Speicher allozieren und dann mit memcpy die Daten kopieren.

Warum verwendest du einen long als Zeigertyp? In C gibt es doch richtige Zeiger. :confused:

Gruß

PS: Ach, da war jemand schneller. Aber da die beiden Beitrage inhaltlich ungefähr übereinstimmen kann das das was ich gesagt habe nicht so falsch sein. ;)
 
Zuletzt bearbeitet:
Zurück