2011-05-11 3 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 '가 무엇인지에 대한 명확한 설명이 필요합니까? 귀하의 질문에 적절한 영어 문장 구조를 사용하십시오. –

+1

그것의 모든 할당 및 할당 취소에 대한 질문에 대답 해 주시길 바랍니다. @ corynelson 대신 첫 번째 질문에서 무엇을하려고하는지 생각해보십시오 ... – capede

답변

3

gtk_entry_get_text 메모리를 확보하려고 노력에서 당신을 방지하기 위해 대신 gchar*const gchar*을 반환합니다. 함수의 문서는 그렇게 알려줍니다. 물론 반환 된 값을 gchar*으로 캐스팅하면 해제 할 수 있지만 C 언어가 바보 같은 일을하지 못하기 때문입니다.

예를 들어 메모리 덩어리는 GtkEntry에서 내부적으로 사용하므로 메모리 덩어리를 비우고 나중에 gtk_entry_set_text을 호출하면 프로그램이 중단됩니다. 이것은 쓰려고하는 메모리가 할당되지 않았기 때문입니다 ...

+0

더 자세한 설명은 분명히 ... thx ... – capede

4

gchar은 C 타입 char의 typedef입니다. 이 특정 포인터를 할당 해제하면 안됩니다. Per documentation :

반환 값 : 위젯의 내용을 가리키는 포인터. 이 문자열은 위젯에서 내부적으로 할당 된 저장소를 가리키며 해제되거나 수정되거나 저장되어서는 안됩니다.

+0

잘 -> 'gchar * wew = (gchar *) gtk_entry_get_text (GTK_ENTRY (gtkentrywidget)); g_free (wew); ' 과 그 모든 문제는 왜 수행 될 수 있습니까? – capede

+1

g_free를 호출하면 정의되지 않은 동작 (UB)이 발생합니다. 물론 그것이 작동하는 것처럼 보일 수도 있지만, 그렇게해서는 안됩니다. – Marlon

+0

작동하지 않는 이유는 무엇입니까?, 정의되지 않은 동작 (UB)은 무엇을 의미합니까? – capede

관련 문제