Освободить строковый член структуры в C - PullRequest
2 голосов
/ 29 октября 2011

У меня есть следующая структура:

struct something{
  char *string_member;

};

теперь я создал

struct something *s = malloc(sizeof(struct something));

s.string_member = malloc(5); //one way
s.string_member = "some thing wrong"; // second way

Пока я освобождаю память, указанную с. Как освободить память, выделенную для string_member в обоих случаях. Должен ли я вообще беспокоиться о string_member во втором случае?

Ответы [ 2 ]

3 голосов
/ 29 октября 2011

Вы не должны освобождать его в своем примере second way, и у вас нет возможности (переносимо) сделать различие между первым и вторым случаем, просто взглянув на указатель. Так что не делайте этого, убедитесь, что вы всегда выделяете string_member, используя malloc или, например, strdup. Таким образом, вы всегда можете free это (один раз).

s.string_member = strdup("some thing wrong");  // the other way

...

free(s.string_member);
1 голос
/ 29 октября 2011

В первом случае звоните free(s.string_member). Во втором случае вам не нужно ничего делать. Это потому, что строка не выделяется динамически. Местоположение, в котором он находится, определяется при загрузке программы, и любая очистка для него также выполняется системой.

...