2011-05-11 156 views
2

我有以下代码:'const gchar *'的含义是什么,使用后需要释放内存吗?

int main() 
{ 

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

return 0; 
} 

gtk_entry_get_text()返回const gchar*,所以没有wew需要被释放或没有,为什么?

+0

我通常不批评语法,拼写,标点符号或大写字母,特别是因为网站上有许多非母语英语的用户,但我无法明白你的意思。你问的只是分配和释放,还是你需要澄清'const'是什么?请在你的问题中使用适当的英语句子结构。 – 2011-05-11 18:22:40

+1

它的所有关于分配和释放,如果你介意请回答我已经问过@corynelson而不是thinkin想要在第一个问题上完成什么的问题... – capede 2011-05-11 18:34:31

回答

3

gtk_entry_get_text返回const gchar*代替gchar*阻止你试图释放内存。该功能的文档甚至告诉你。当然,如果你将返回的值赋给gchar*,你可以释放它,但这只是因为C语言不会阻止你做愚蠢的事情。

例如,由于GtkEntry在内部使用内存块,如果释放内存块并稍后调用gtk_entry_set_text,程序将崩溃。这是因为它试图写入的内存未分配...

+0

更清楚的解释,虽然... thx ... – capede 2011-05-13 06:54:14

4

A gchar只是C型char的typedef。您一定不能释放此特定指针。根据documentation

返回:作为字符串指向小部件内容的指针。该字符串指向小部件内部分配的存储空间,不得释放,修改或存储。

+0

呃我做 - > 'gchar * wew = (gchar *)gtk_entry_get_text(GTK_ENTRY(gtkentrywidget)); g_free(wew);' 它的一切都很好,为什么这些可以被执行? – capede 2011-05-11 18:27:29

+1

如果您正在调用g_free,那么这是未定义的行为(UB)。确定它可能“看起来”工作,但你不应该这样做。 – Marlon 2011-05-11 19:29:57

+0

为什么当它似乎工作时我不能这么做?,什么是未定义的行为(UB)是什么意思? – capede 2011-05-11 20:42:08

相关问题