realloc
동작에 대한 몇 가지 질문이 있습니다.realloc 감소
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *str;
/* Initial memory allocation */
str = malloc(5 * sizeof(int));
*str = 1;
*(str + 1) = 2;
*(str + 2) = 3;
*(str + 3) = 4;
*(str + 4) = 5;
/* Reallocating memory */
int i, j;
for (i = 5; i > 0; i--) {
str = realloc(str, i * sizeof(int));
for (j = 0; j < i; j++) {
printf("%d", *(str + j));
}
printf("\n");
}
free(str);
return(0);
}
, 나는
realloc
작은이 가장 높은 숫자를 드롭 것이라고 확신 할 수 있습니까?realloc
은 마지막 메모리를 해제하고 동일한 주소를str
에 유지합니까? 또는 주소가 바뀌어도 현재 위치에 공간이 있는지 여부가 변경 될 수 있습니까?
'realloc()'은 항상 새로운 주소 공간으로 이동할 수 있습니다. 예를 들어, 크기 블록마다 다른 메모리 영역을 사용할 수 있습니다. – Barmar
C99과 C11은'realloc()'에 대해 아주 명확합니다 :'realloc' 함수는'ptr'가 가리키는 이전 객체를 할당 해제하고'size'에 의해 지정된 크기를 가진 새로운 객체에 포인터를 반환합니다 ._ 때로는 일부 구현에서는 새 객체가 이전 객체와 동일한 주소를 갖지만 이전 객체는 기술적으로 릴리스되었습니다. 이전에 할당 된 메모리에 합법적으로 액세스 할 수 없으므로 정의되지 않은 동작이 발생합니다. 그러므로 어떤 일이 일어날 지 테스트 할 방법이 없습니다. 대부분의 구현은 메모리 축소시 데이터를 이동하지 않지만 전혀 보장 할 수는 없습니다. –