обратный адрес памяти, выделенной в функции - PullRequest
0 голосов
/ 11 января 2010

Когда в функции выделяется память, разве нельзя использовать эту память вне функции, возвращая ее адрес?

Есть исключения?Кажется, вот такой «пример»:

const char * f() {  
  return "HELLO";  
}

Как это объяснить?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 11 января 2010

Строковые литералы размещаются статически, поэтому возвращение адреса строкового литерала, такого как "HELLO", безопасно, и его можно без проблем использовать вне функции.

3 голосов
/ 11 января 2010

Почему вы думаете, что это невозможно? Похоже, вы путаете это с правилом о том, что нельзя возвращать адреса локальных переменных вызывающим функциям. Вы не можете сделать это, потому что переменные, локальные для функции, имеют время жизни только на время вызова этой функции; как только функция вернется, эти переменные станут мусором.

Есть вещи, время жизни которых выходит за пределы времени жизни вызова функции; это нормально, чтобы вернуть им адреса. Примерами этих вещей являются блоки памяти, выделенные в куче (например, с malloc), или объекты с статической продолжительностью хранения (например, глобальные переменные и строковые литералы).

2 голосов
/ 11 января 2010

«Привет» - это константа. Он не исчезает, поэтому можно использовать указатель. Локальная переменная - это другая история ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...