Der Stack muss einfach groß genug sein, dass dein lokales char buffer[schLen]; rein passt, und du den buffer füllen kannst ohne dass du dabei was anderes zerschießt. Am Ende von getValues ist der Bereich auf dem Stack automatisch wieder frei (und nichts anderes zerschossen).
Hier mal der Sketch.
Ich hab den angepasst, sodass im Loop nur einmal die Funktion "get_values()" ausgeführt wird.
Danach wird bei jedem Durchlauf nur noch der Speicher ausgegeben.
Meine Konsole zeigt:
Freier Speicher vor set_values: 6692
Freier Speicher nach set_values: 6564
Freier Stack-Speicher nach einmal get_values: 116
Freier Stack-Speicher nach einmal get_values: 116
Freier Stack-Speicher nach einmal get_values: 116
D.h. sobald einmal der Buffer gefüllt ist, bleibt der Speicher bei 116.
Das beißt sich mit dem hier:
Warum wächst der dann nicht wieder auf 6692 (oder zumindest etwas höher).
Leudde, ich steh auf dem Schlauch:
Liegt bestimmt an der Zeitumstellung.
Edit: Oder liegt mein Denkfehler nur wieder darin, dass die Funktion gar nicht das ausgibt, was ich erwarte und in Wirklichkeit der Speicher wieder frei ist? D.h. die Funktion gibt mit nur aus, welchen Speicher ich irgendwann mal belegt hatte?
Edit 2: Das hier hab ich gerade noch gefunden:
evtl. ist das ja ne Möglichkeit, sich den freien Speicher anzeigen zu lassen.
Aber ich bin mir mittlerweile sicher --> genau da liegt mein Denkfehler. Die Funktion, von der ich immer dachte, dass sie mir den freien Speicher ausgibt, gibt mir nur aus, was die höchste Marke von benutztem Speicher war, die ich bisher erreicht hatte.
Immer noch Verständnisprobleme mit lokalen und globalen Variablen?
Deine testarray, in dass Du mit memcpy schreibst ist eine globale Variable, wenn Du den Code nicht zwischendurch geändert hast.
Yep.
Das war von Anfang an mein Fehler.
Aber zumindest kann ich mir mit der Funktion kurzzeitig ausgeben lassen, wie hoch ich im Loop maximal gekommen bin und meine Stackgröße entsprechend anpassen.
Was aber dennoch interessant wäre: ob ich mir das memcpy sparen kann.
hab ich nicht geändert und ist mir auch klar.
Wie gesagt: Ich dachte die Funktion gibt mir die aktuelle Stackbelegung aus und nicht die höchste bisher erreichte Grenzen.