Приведенный ниже фрагмент кода дает 11 11 неопределенное значение. Но почему я получаю неопределенное значение, когда тот же оператор выполняется второй раз? Это что-то связано с объемом функции?Указатели и аргументы функции
void foo(int **const p)
{
int j = 11;
*p = &j;
printf("%d ", **p);
}
int main()
{
int i = 10;
int *p = &i;
foo(&p);
printf("%d ", *p);
printf("%d ", *p);
return 0;
}
Это то, что я до сих пор не могу понять, почему он работает в первый раз после выполнения функции и не работает при следующих попытках. Я ожидал бы, что он потерпит неудачу и для первого printf в главном – Dabo
@DavidBo. Это точка - ** что-либо ** может случиться. Нет правил относительно того, как работает программа, когда вызывается неопределенное поведение. Это будет зависеть от вашей реализации. Главное правило - не вызывать UB вообще. – mathematician1975
Получил, спасибо. – Dabo