2016-09-02 4 views
1

나는 cgo에 새로운 경험이 있으며 메모리 관리와 관련된 몇 가지 질문이 있습니다.cgo 내가 할 C 함수에 의해 반환 된 변수에 대한 메모리를 해제해야합니까

char* get_str_in_arr(char **charArr, size_t i){ 
    return charArr[i]; 
} 

내가 다음과 같이 메모리 확보해야 할 :

내가 아래 간단한 C 함수가 말해이 경우

func doSomething(){ 
    cStr := C.get_str_in_arr(feats, C.size_t(1)) 
    goStr := C.GoString(cStr) 
    defer C.free(unsafe.Pointer(cStr)) 
    ... 
} 

을 내가 함께이 작업을 수행해야 할 메소드에서 리턴 된 모든 변수. 예를 들어, C Struct, uint32_t, ... 등

답변

0

이동의 측면에서 C로 간주하십시오. C 코드에서 할당 된 일부 포인터 (malloc()) —에 대한 포인터를 해제해야합니다 (물론 C 코드로 할당 된 다른 메모리에서 참조되지 않는 경우). 어떤 구조체 (구조체에 대한 포인터가 아님) 나 정수인 —을 반환한다면 아무 것도 무료가 아닙니다. 해제되어서는 안되는 정적 메모리 —에 대한 포인터를 반환하는 경우.

그래서 예를 들어 feats이 무엇인지, 어떻게 할당되었는지, 어떻게 관리되는지에 대한 질문입니다. 현재 코드를 감안할 때 free() 반환 값이 필요한지 여부에 대한 최종 답을 제공하는 것은 불가능합니다.