Speicher eines structs löschen

Hola zusammen,

hab da ein kleineres Problem. Und zwar habe ich einen Struct mit SQL-Daten befüllt und würde den nach der Übergabe gerne wieder frei machen für die nächste Abfrage. Denn das Ganze laüft in einer Simulations und wird ständig neu befüllt und übergeben.

Hier Ausschnitte meines SourceCodes:

/********************* Initialization Struct - SQL-Abfrage ***********/
/********************* Erstelle einen Struct(Vnr, VQueue, VMean, …) */
/********************* durch SQL-Abfrage der Table Initialization ****/
struct My_Equip {

int Reihen;
int Vnr;
int VQueue_No;
…(und weitere)

}paket[MAX1];

struct My_Equip *Def_Dest(unsigned long nr, struct My_Equip *structlist, int vreturn, int AProcStep)
{

Hier weiß ich den Speicher zu
structlist = (struct My_Equip*)malloc(sizeof(struct My_Equip));

return structlist;
}
/*********************************************************************/
Mit dem Aufruf von FreeStruct() möchte ich den struct wieder frei machen

int FreeStruct()
{
free(struct My_Equip*);
return 0;
}
/*********************************************************************/

Hallo Mathias,

hab’ ich was überlesen, oder war da gar keine Frage?

Chris

Hallo,

hab da ein kleineres Problem. Und zwar habe ich einen Struct
mit SQL-Daten befüllt und würde den nach der Übergabe gerne
wieder frei machen für die nächste Abfrage. Denn das Ganze
laüft in einer Simulations und wird ständig neu befüllt und
übergeben.

Hier Ausschnitte meines SourceCodes:

Leider hast du die WICHTIGEN Teile weggelassen !!

/********************* Initialization Struct - SQL-Abfrage
***********/
/********************* Erstelle einen Struct(Vnr, VQueue,
VMean, …) */
/********************* durch SQL-Abfrage der Table
Initialization ****/
struct My_Equip {

int Reihen;
int Vnr;
int VQueue_No;
…(und weitere)

}paket[MAX1];

struct My_Equip *Def_Dest(unsigned long nr, struct My_Equip
*structlist, int vreturn, int AProcStep)
{

Hier weiß ich den Speicher zu
structlist = (struct My_Equip*)malloc(sizeof(struct
My_Equip));

in „structlist“ speicherst du den Zeiger auf den Speicherbereich welcher dir von „malloc“ zugeteilt wird.

return structlist;

Dieser Zeiger verschwindet jetzt aus deinem geposteten Code. Was macht die Aufrufende Funktion damit ???

}
/*********************************************************************/
Mit dem Aufruf von FreeStruct() möchte ich den struct
wieder frei machen

int FreeStruct()
{
free(struct My_Equip*);

  1. „free“ benötigt nur eine Speicheradresse, was da hier wie formatiert ist interessiert gar nicht. Zudem kannst du nicht die Struct freigeben, sondern nur den von „malloc“ erhaltenen Bereich.
  2. Siehe Kommentar weiter oben: Wo wurde die von „malloc“ übergebene Adresse abgelegt ???
    *. scheinbar hast du hier einfach etwas gebastelt, bis der Compiler nicht mehr reklamiert hat.

return 0;
}
/*********************************************************************/

Hola,

hab das Problem inzwischen selbst über eine einfache Hilfshunktion gelöst. Ist zwar nicht die sauberste Lösung aber für unsere Zwecke tuts das.

Und zwar hab ich einfach die Variable in dem Struct auf die ich mich in meinem späteren Programmablauf berufe auf null gesetzt, bevor ich die Abfrage mach.

Wie gesagt nicht die sauberste, aber kurzfristig die effektivste Lösung. Und darauf kommt es hier ja an.

Danke aber für Euer Bemühen!!

Grüße aus der FHG in Stuttgart

Mathias