Извиняюсь, за элементарный вопрос!
Будет ли, в данном примере, при вызове функции printf(), утекать память. А если нет, то почему? Ведь в функцию main() возвращается указатель на временный объект. На выходе из функции printf() этого объекта уже нет!
char* MyPrint(void)
{
char mess[32] = {'b', 'l', 'a', '-', 'b', 'l', 'a', '-', 'b', 'l', 'a'};
return mess;
}
int main (void)
{
printf("%s", MyPrint());
return 0;
}
Спасибо
Здравствуйте, Аноним, Вы писали:
А>А>char* MyPrint(void)
А>{
А> char mess[32] = {'b', 'l', 'a', '-', 'b', 'l', 'a', '-', 'b', 'l', 'a'};
А> return mess;
А>}
А>int main (void)
А>{
А> printf("%s", MyPrint());
А> return 0;
А>}
А>
Утекать память не будет, а вот насчёт работать...
mess уничтожается при выходе из MyPrint (т.к. локальный), что выведет printf — не определено.
Здравствуйте, <Аноним>, Вы писали:
А>Будет ли, в данном примере, при вызове функции printf(), утекать память. А если нет, то почему? Ведь в функцию main() возвращается указатель на временный объект. На выходе из функции printf() этого объекта уже нет!
Утечки здесь нет, поскольку динамическая память не задействована. А вот обращение к разрушенному объекту — есть.
При известной ловкости рук можно получить любой мусор на выходе. Но в твоём случае — повезло: вызов и исполнение printf не затёрло массив либо затёрло самый его хвостик, уже после концевого нуля.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>