Управление памятью: область видимости и локальная переменная указателя

Управление памятью: область видимости и локальная переменная указателя

В. Что касается ошибки управления памятью, что является ошибкой в ​​следующем коде?

 char* secret_message()
{
char message_buffer[100];
char* text = "Hey man!";
int n = 0;
while (text[n] != '\0')
n++;
for (int i = 0; i <= n ; i++)
message_buffer[i] = text[i];
return message_buffer;
}

Ответ.
Я думаю, что message_buffer является локальной переменной
это автоматически восстанавливается после завершения функции.
Эта функция возвращает ссылку на неверную ячейку памяти
, поскольку message_buffer исчезает сразу после оператора return.

Это правильно?

Пожалуйста, дайте мне знать.
Спасибо,

0

Решение

Ответ. Я думаю, что message_buffer — это локальная переменная, которая автоматически восстанавливается после завершения функции. Эта функция возвращает ссылку на недопустимую ячейку памяти, поскольку message_buffer исчезает сразу после оператора return.

Да, это правильно. message_buffer находится в стеке, его память будет освобождена при выходе из функции. указатель будет указывать на освобождение памяти.

КСТАТИ:

char* text = "Hey man!";

должно быть

const char* text = "Hey man!";

в современном C ++.

2

Другие решения

message_buffer — это автоматическая переменная, область действия которой находится только внутри функции.
эта переменная либо должна быть объявлена ​​в основной функции, либо объявлена ​​как статическая переменная внутри функции.

2

Ты прав. Это приводит к неопределенному поведению.

0
По вопросам рекламы [email protected]