Что означает «const gchar *», и нужно ли освобождать эту память после использования? - PullRequest
2 голосов
/ 11 мая 2011

У меня есть следующий код:

int main()
{

const gchar *wew = gtk_entry_get_text(GTK_ENTRY(gtkentrywidget));

return 0;
}

gtk_entry_get_text() возвращает const gchar*, поэтому wew нужно освободить или нет, и почему?

Ответы [ 2 ]

4 голосов
/ 11 мая 2011

A gchar - это просто определение типа для типа C char. Вы не должны освобождать этот конкретный указатель. Согласно документации :

Returns: указатель на содержимое виджета в виде строки. Эта строка указывает на внутренне выделенное хранилище в виджете и не должна быть освобождена, изменена или сохранена.

3 голосов
/ 12 мая 2011

gtk_entry_get_text возвращает const gchar* вместо gchar*, чтобы предотвратить попытки освобождения памяти. Документация по функции даже говорит вам об этом. Конечно, если вы приведете возвращенное значение к gchar*, вы сможете его освободить, но это только потому, что язык C не мешает вам делать глупости.

Например, поскольку этот кусок памяти внутренне используется вашим GtkEntry, если вы освободите этот кусок памяти, а затем вызовете gtk_entry_set_text, ваша программа потерпит крах. Это потому, что память, в которую он пытается записать, не выделена ...

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