Нужно ли освобождать память от каждой инициализированной строки? - PullRequest
0 голосов
/ 01 октября 2011
// loads a file into memory
void load_file()
{
   char *data = "This is so data";
   printf("function: %s\n", data);

}

Вышеупомянутый код утечек памяти?У меня есть бесплатный звонок (данные)?Почему или почему нет?

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

Он не может просочиться, потому что вы не выделяли его динамически.data является строковым литералом, а не динамически размещаемым массивом символов.

1 голос
/ 01 октября 2011

Вы не выделяете там никакой памяти, поэтому нет утечки памяти. Вы просто копируете указатель на существующую строку в исполняемом образе, а не на саму строку.

По этой причине тип data должен быть const char*, чтобы предотвратить случайное изменение строки, на которую указывает data.

data сам по себе, указатель, размещается в стеке, как было бы i в int i = 5;. Этот вид неявного распределения также автоматически отменяется.

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