C 프로젝트를 개발 중이며 특정 순간에 calloc() 함수를 호출하고 이미 사용중인 메모리 블록을 할당합니다. 어떻게 가능합니까? 내 메모리 할당 사용법을 점검하고 malloc/calloc을 호출 할 때마다 free (pointer_to_the_allocated_memory)를 호출한다. 따라서 메모리 누수 문제가 아니라 두 번 해제 된 포인터가 아닙니다. 나는 코드를 붙여 넣지 않습니다. 왜냐하면 그것이 대학 수업을위한 것이기 때문에 나는 아직 보내지 않았습니다. 모든 유형의 도움/조언을 환영합니다. 미리 감사드립니다. Calloc()이 이전에 할당 된 메모리를 할당 중임
-2
A
답변
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 */
은/디버그에게 메모리 사용을 추적하기 위해 Valgrind의 같은 것을 사용해보십시오. –
각 프로그램에는 자체 가상 메모리 공간이 있습니다. – sjsam
원본과 비슷한 것을 게시 할 수 있습니까? 자체적으로 공유하고 싶지 않은 독점 코드에 대해 묻는 사람들이 많이 있지만, 대개는 예제를 제공합니다. 상황을 소규모로 재현 할 수 있습니까? –