2016-11-25 1 views
-1

안녕하세요, 아래와 같이 방금 추가 로직 볼 수 없습니다 전체 구문 전 지역의 포인터에 할당하여 globel 변수를 반환하는 경우메모리가 파괴됩니까?

int globalVar; 

static void* average() 
{ 
    void *data = NULL; 

    if (true) 
    { 
     globalVar = getAverage(); 
     data = ((void *)&globalVar); 
    } 

    return (data); 
} 

그래서 내 관심사는 다음 메모리에있을 때 또는 함수 끝을 잃은 것이다됩니다 코드가?

고마워,

답변

2

아니요 여기에 메모리 누수가 없습니다. 메모리 누수는 균등하지 않은 mallocfree 호출에서만 발생하며 여기서는 아무런 변화가 없습니다.

(getAverage()그 자체가 누출이 아님을 가정합니다).

1

그렇다면 로컬 포인터에 할당하여 globel 변수를 반환하면 함수가 끝날 때 메모리에 손실되거나 잃어 버릴 수 있습니다. 이 전역 변수가 있다면

번호

그것은 정적 저장 기간을해야합니다 로컬 포인터를 통해 그것을 반환 할 때 그것은 "손실"되지 않습니다.

포인터를 통해 개체에 액세스 할 때 중요한 것은 액세스하는 개체의 저장 기간입니다. 포인터의 저장 기간이 아닙니다. 따라서 전역 변수가 정적 저장 기간 (일반적으로 소스 파일의 맨 위에있는 함수 외부에 정의 됨)을 가지고 있다고 가정하면 문제가 없습니다.

관련 문제