Überschriebener Speicherbereich eines struct-arrays in einem Thread



  • Hallo,

    ich habe in main() dynamisch den Speicher für ein struct-array alloziert und es dann initialisiert. Den Pointer auf dieses array habe ich einem Thread übergeben. Als ich dann auf die Daten in diesem array im Thread zugreifen wollte, nachdem ich ganz am Anfang dieses Threads einige string-Variablen deklariert und initialisiert hatte, war der Inhalt dieses arrays verändert.

    Als Abhilfe kann ich die Änderung des Inhaltes dieses arrays vermeiden, indem ich zu Beginn des Threads erneut den Speicher für ein gleiches struct-array alloziere, es wird dieser Speicherbereich nämlich zum zweiten Mal alloziert!!

    Gibt es da eine systematische Vorgehensweise? Wie stelle ich sicher, dass der Inhalt des struct-arrays nicht unbeabsichtigt verändert wird? Muss/Sollte ich den Speicher auch wieder zwei Mal freigeben 😕 ?

    Natürlich könnte ich das struct-array auch global deklarieren. Das ist jedoch wegen der statischen Deklaration nicht die bevorzugte Lösung.

    Danke für euere Hilfe 🙂

    Ulrich



  • const?



  • Hallo The-Kenny,

    habe meine Frage noch ergänzt: ich möchte nur die unbeabsichtigte Veränderung vermeiden. Kontrolliert möchte ich den Inhalt schon verändern.

    Danke

    Ulrich



  • Hohe-Berge schrieb:

    ich habe in main() dynamisch den Speicher für ein struct-array alloziert und es dann initialisiert. Den Pointer auf dieses array habe ich einem Thread übergeben. Als ich dann auf die Daten in diesem array im Thread zugreifen wollte, nachdem ich ganz am Anfang dieses Threads einige string-Variablen deklariert und initialisiert hatte, war der Inhalt dieses arrays verändert.

    Ich gehe davon aus das dein Fehler nichts mit den Thread als solches zu tun hat. Allozierte Speicherbereiche können nicht ohne weiteres durch andere Bereiche überschrieben werden, wenn man nicht gerade über Bereichsgrenzen schreibt, uninitialisierte Zeiger verwendet...

    cu André



  • Hallo,

    Problem erkannt 😃 !

    Nach der Erzeugung des Threads in main() gab es kein join-Befehl vor der Freigabe des dynamischen Speichers. Somit wird der allozierte Speicher "relativ" schnell wieder freigegeben.

    Durch das Einfügen des join-Befehls wartet main() auf das Beenden des Threads und gibt erst danach den dynamischen Speicher wieder frei.

    Danke für die Hilfe 🙂

    Ulrich


Anmelden zum Antworten