Ich versuche, Speicherverluste in meinem Code zu vermeiden. Ich muss pElement, Zeile und pSecond freigeben, ohne die Werte in pImage zu verlieren. Weil ich diese Werte in meiner Druckfunktion drucken muss.Wie kann ich einen struct Zeiger, den ich brauche
Meine Add-Funktion enthält struct GraphicElement * pElements ;, struct GraphicElement * pSecond ;, struct Punkt point ;.
Ich reservieren Speicher mit Malloc für jede Struktur und fügen Sie dann die Werte und dann übergebe ich die endgültigen Werte in pImage. Alle meine anderen Funktionen funktionieren perfekt neben der Tatsache, dass ich immer 3 Speicherlecks habe. Weil ich nicht frei habe (pSekunde); .... frei (pElement) ... frei (Linie);
Wenn ich versuche, sie zu befreien, bevor meine Funktion beendet und die Werte in pImage übergeben. Meine Werte werden alle gelöscht.
Wie kann ich diese Werte innerhalb meiner Add-Funktion lokal freigeben?
struct Point
{
int x, y;
};
struct Line
{
Point start;
Point end;
};
struct GraphicElement
{
enum{ SIZE = 256 };
unsigned int numLines; //number of lines
Line* pLines; //plines points to start and end
char name[SIZE];
};
typedef struct
{
unsigned int numGraphicElements;
GraphicElement* pElements; //the head points to pLines
} VectorGraphic;
void InitVectorGraphic(VectorGraphic*); //initializes pImage->pElement
void AddGraphicElement(VectorGraphic*); //Used to add
void ReportVectorGraphic(VectorGraphic*); // prints pImage contents
void CleanUpVectorGraphic(VectorGraphic*); //deallocates memory
Es klingt wie Ihr pImage diese Werte verwendet. Warum müssen sie in deinem Add freigegeben werden? Warum nicht sie in Ihrer 'CleanUpVectorGraphic' Funktion freigeben? – NullEntity
Wenn Sie einen Strukturzeiger benötigen, warum möchten Sie ihn dann an erster Stelle freigeben? IMO, Sie sollten erklären, was Sie tun wollen, da ich nicht verstehe, was Sie erreichen wollen. –
@Disillusioned könnte ich auf diese Strukturen von einer anderen Funktion zugreifen? Ich weiß, ich kann befreien (pImage); und alle seine Inhalte in einer Schleife. Aber was ist mit line, pSecond und pElement? Wie würde ich von der Aufräumfunktion auf sie zugreifen? – Calidreaminn