2012-09-13 4 views
0

가능한 중복 :
How to handle realloc when it fails due to memory?
realloc이 실패 할 때 동적 배열 내의 포인터를 해제하는 방법은 무엇입니까?

이의 내가 realloc을가 실패 할 때

char **pointers_to_pChar = 0; 
pointers_to_pChar = (char **)malloc(sizeof(char *) * SIZE); 
for (i = 0; i < SIZE; ++i) 
{ 
    pointers_to_pChar[i] = malloc(sizeof(char) * 100)); 
} 

//some stuff... 
//time to realloc 
pointers_to_pChar = realloc(pointers_to_pChar, sizeof(char *) * pointer_count + 1); 
if (pointers_to_pChar == NULL) 
{ 
    //i have to free pointers in the array but i don't have access to array anymore... 
} 

가 어떻게 상황을 처리해야한다 포인터의 배열이 있다고 가정 해 봅시다? 배열 내의 각 포인터에 액세스하여 가능한 메모리 누수를 피하기 위해 해제해야합니다.

답변

1

임시 포인터에 결과를 작성 볼 수 있습니다; realloc이 실패하면 원래 메모리 블록은 그대로 유지되지만 NULL을 반환하므로 포인터를 잃어 버리게됩니다.

char **tmp = realloc(pointers_to_pChar, ...); 
if (!tmp) 
{ 
    //realloc failed 
} 
else 
{ 
    pointers_to_pChar = tmp; 
} 
1

먼저 다른 포인터로 다시 할당 한 다음 NULL을 확인해야합니다.
이렇게하면 배열에 계속 액세스 할 수 있습니다.

1

남자 realloc을, 당신은

If realloc() fails the original block is left untouched; it is not freed 
or moved.