Ich verstehe nicht, warum der folgende C-Code funktioniert (Drucke '53'). Ich dachte, dass Int ein würde auf den Stapel gelegt und weggewischt werden, sobald foo() beendet. Wenn der Compiler stattdessen int auf dem Heap platziert, gibt es eine Möglichkeit, es nicht zu sagen?Legt der Compiler Speicher auf den Heapspeicher?
#include "stdio.h"
int * foo()
{
int a = 53;
int * b = &a;
return b;
}
int main(void)
{
int * c = foo();
printf("%d\n",*c);
return 0;
}
Genau das passiert. Dieses Programm hat ein undefiniertes Verhalten. – Jon
Sie sind nur glücklich?!. 'a' aka' b' war auf dem Stapel - jetzt lebst du in der Welt des undefinierten Verhaltens –
Du musst eine andere Funktion aufrufen. Ihr Stapelzeiger hatte keinen Grund, ihn mit etwas anderem zu überschreiben. – jiveturkey