2016-06-19 7 views
-2

C 프로젝트를 개발 중이며 특정 순간에 calloc() 함수를 호출하고 이미 사용중인 메모리 블록을 할당합니다. 어떻게 가능합니까? 내 메모리 할당 사용법을 점검하고 malloc/calloc을 호출 할 때마다 free (pointer_to_the_allocated_memory)를 호출한다. 따라서 메모리 누수 문제가 아니라 두 번 해제 된 포인터가 아닙니다. 나는 코드를 붙여 넣지 않습니다. 왜냐하면 그것이 대학 수업을위한 것이기 때문에 나는 아직 보내지 않았습니다. 모든 유형의 도움/조언을 환영합니다. 미리 감사드립니다. Calloc()이 이전에 할당 된 메모리를 할당 중임

+0

은/디버그에게 메모리 사용을 추적하기 위해 Valgrind의 같은 것을 사용해보십시오. –

+0

각 프로그램에는 자체 가상 메모리 공간이 있습니다. – sjsam

+1

원본과 비슷한 것을 게시 할 수 있습니까? 자체적으로 공유하고 싶지 않은 독점 코드에 대해 묻는 사람들이 많이 있지만, 대개는 예제를 제공합니다. 상황을 소규모로 재현 할 수 있습니까? –

답변

1

두 개의 포인터가 같은 위치를 가리킬 수도 있습니다.

p1 = malloc(sizeof(int)); 
/* ... */ 
p2 = p1; 
/* ... */ 
free(p1); 
/* ... */ 
p3 = malloc(sizeof(int)); /* may allocate the block already used by p2 */ 

종종 그렇게 명확하지는 않습니다. 이것은 포인터 연산 (즉, p2++)을 통해 일어날 수 있으며, 또는 다른 부분이 다른 기능으로 수행 될 수 있습니다.

또 다른 가능성

당신이 그것을 몰래 포인터를 해제한다는 것입니다 :

p1 = malloc(sizeof(int)); 
foo(p1); /* this function calls free(p1) */ 
p2 = malloc(sizeof(int)); /* may allocate the block already used by p1 */ 
+1

가능하다면 가능성이 없으며 작성한 시나리오가 발생한다는 것을 알 수있는 방법이 없습니다. 그것은 모두 아주 컴파일러 구현에 관한 것입니다. – Nava2

+1

calloc()이 "이미 사용중인 메모리 블록을 할당한다"는 사실을 감안할 때 가능성이 높습니다. 사용중인 메모리 블록을 할당하려면 블록을 해제하거나 할당하지 않아야합니다. – user31264

+0

답변 주셔서 감사합니다 user31264 – mariano