Рубрики

C | Динамическое Распределение Памяти | вопрос 2

Рассмотрим следующие три функции C:

[PI] int * g (void

  int x= 10; 

  return (&x); 

}  

    

[P2] int * g (void

  int * px; 

  *px= 10; 

  return px; 

    

[P3] int *g (void

  int *px; 

  px = (int *) malloc (sizeof(int)); 

  *px= 10; 

  return px; 

}

Какие из вышеперечисленных трех функций могут вызвать проблемы с указателями? (GATE 2001)
(А) Только Р3
(B) Только P1 и P3
(С) только P1 и P2

(D) P1, P2 и P3

Ответ: (с)
Объяснение: В P1 переменная-указатель x является локальной переменной для g (), а g () возвращает указатель на эту переменную. x может исчезнуть после того, как g () вернулась, поскольку x существует в стеке. Таким образом, & x может стать недействительным.
В P2 переменной-указателю px присваивается значение без выделения ему памяти.
P3 работает отлично. Память выделяется для переменной-указателя px с помощью malloc (). Таким образом, px существует в куче, его существование останется в памяти даже после возврата g (), как в куче.

Тест на этот вопрос

Рекомендуемые посты:

C | Динамическое Распределение Памяти | вопрос 2

0.00 (0%) 0 votes