Я наткнулся на эту страницу, на которой показаны распространенные способы создаются.
Код ниже используется для иллюстрации висячих указателей путем возврата адреса локальной переменной:
// The pointer pointing to local variable becomes
// dangling when local variable is static.
#include<stdio.h>
int *fun()
{
// x is local variable and goes out of scope
// after an execution of fun() is over.
int x = 5;
return &x;
}
// Driver Code
int main()
{
int *p = fun();
fflush(stdout);
// p points to something which is not valid anymore
printf("%d", *p);
return 0;
}
При запуске это предупреждение компилятора, которое я получаю (как и ожидалось):
In function 'fun':
12:2: warning: function returns address of local variable [-Wreturn-local-addr]
return &x;
^
И это результат, который я получаю (пока хорошо):
32743
Однако, когда я комментирую строку fflush(stdout), я получаю следующий вывод (с тем же предупреждением компилятора):
5
В чем причина такого поведения? Как именно присутствие/отсутствие команды fflush вызывает такое изменение поведения?
fflush
не имеет значения. (fflush
очищает содержимоеstdout
, но, поскольку у вас ничего не буферизовано, это не служит законной цели). Вы можете получить5
, вы можете получитьSegmentation Fault
, это не определено. - person David C. Rankin   schedule 23.04.2017