2012-08-23 4 views
2

를 해제 할 것으로 보인다. 나는 파일에서 그것을 읽고, strtok로 구문 분석하고 char *로 리턴한다. 설정 파서는 특정 토큰을 찾고 :GTK +는 구조체의 gchar 내가 구조체가 내 응용 프로그램에서

if(a==b) 
    { 
    Xen_Server_Connection.xen_srv_addr=Parm_Pars(pattern, 2); 
    ..... 
    } 

이 할당이 경우 블록 내부에만 작동합니다. gchar이 바로 뒤에 쓰레기가되었습니다. 하지만 : I :

if(a==b) 
    { 
    Xen_Server_Connection.xen_srv_addr="192.168.1.1"; 
    ..... 
    } 

모두 괜찮아 보이고 전 세계적으로 해당 gchar에 액세스 할 수 있습니다. 뭔가 이해가 안되는 것 같아 보인다

답변

2

Parm_Pars() 함수가 반환 값에 대해주는 평생 보장을 이해하지 못한다. 그것은 영원히 살지 않는 것 같아서, 당신이 그것에 매달리고 싶다면 그것을 복제해야합니다.

동적으로 할당 된 사본을 얻으려면 g_strdup() 전화로 해당 줄을 감쌀 만하면됩니다. 물론 Xen_Server_Connection을 해제하려면 모든 중복 문자열에 g_free()을 호출해야합니다. 그렇지 않으면 메모리가 누출됩니다.

UPDATE : gcharchar 단지의 별칭입니다 혼합 일반 chargchar입니다 좋은, 입심 보장. 나는 그들이 심지어 응용 프로그램이 결코 gchar을 사용하지 않는다고 (어딘가에) 추천한다고 생각한다.

+0

오, 이런 어리석은 실수. 고마워요! 한 번만 더 질문합니다. 이 경우 char와 gchars를 하나의 코드로 혼합하는 것이 좋습니다. – pugnator

+0

@unwind 당신은 StackOverflow에 그것을 여기에서 읽습니다 : http://stackoverflow.com/questions/2800310/converting-an-array-of-characters-to-a-const-gchar/2800318#2800318 – ptomato

관련 문제