realloc 예제

실제로 realloc 함수를 사용하면 정확하게이 작업을 수행 할 수 있습니다. 이전 포인터(예: malloc에 대한 초기 호출에서 받은 것)와 새 크기를 다시 할당하고 realloc은 새 크기를 담을 수 있을 만큼 큰 메모리 덩어리를 제공하기 위해 수행할 수 있는 작업을 수행합니다. 예를 들어 이전 예제에서 100int 대신 200ints를 가리키는 ip 변수를 원한다면 realloc()가 동적으로 할당된 메모리에만 사용되어야 한다는 점에 유의해야 합니다. 메모리가 동적으로 할당되지 않은 경우 동작은 정의되지 않습니다. 예를 들어 프로그램 1은 realloc() 잘못된 사용을 보여 주며 프로그램 2는 realloc()의 올바른 사용을 보여 줍니다. 구조를 포함하는 배열로 이 작업을 수행할 수 있습니까? , 예를 들어, 라 [10]를 확대하기 위해, 첨부 된 코드의 때때로 당신은 당신이 필요로하는 메모리의 양을 처음에 확실하지 않다. 예를 들어 사용자가 읽은 일련의 항목을 저장해야 하고 사용자가 `end` 신호를 입력할 때까지 얼마나 많은 항목을 읽을 수 있는지 알 수 있는 유일한 방법은 처음 몇 개를 읽고 저장하기 시작할 때 알 방법이 없습니다. ` 당신이 그 `끝`마커를 볼 수있을 때까지 얼마나 많은 당신이 볼 수 있습니다. 100개의 항목에 대한 공간을 할당할 수 있으며, 사용자가 `end` 마커를 입력하기 전에 101번째 항목을 입력하면 내가 요청한 100개의 항목을 기억해 두는 방법을 원할 수 있습니다. 내 마음을 바꾸고 대신 200을 가질 수 있을까?“ realloc() 함수는 ptr로 가리키는 메모리 개체의 크기를 크기별로 지정된 크기로 변경합니다. 개체의 내용은 새 크기와 이전 크기의 크기보다 작을 때까지 변경되지 않습니다. 메모리 개체의 새 크기에 개체의 이동이 필요한 경우 개체의 이전 인스턴스화에 대한 공간이 해제됩니다. 새 크기가 큰 경우 개체의 새로 할당된 부분의 내용을 지정하지 않습니다.

크기가 0이고 ptr이 null 포인터가 아닌 경우 가리키는 개체가 해제됩니다. 공간을 할당할 수 없는 경우 개체는 변경되지 않은 상태로 유지됩니다. 원래 (C89)에서 0 크기에 대한 지원이 malloc() 및 calloc()을 사용하여 일부 메모리를 할당했다고 가정해 봅시다.와 같은 코드를 수용하기 위해 0 크기에 대한 지원이 추가되었지만 나중에 메모리가 너무 크거나 너무 작다는 것을 알게되었습니다. realloc() 함수는 이전 데이터를 잃지 않고 할당된 메모리의 크기를 조정하는 데 사용됩니다. 구문은 다음과 같습니다 ptr이 null 포인터인 경우 realloc()는 지정된 크기의 malloc()과 동일합니다. realloc는 스레드 안전: 그것은 단지 그것의 인수를 통해 볼 수 있는 메모리 위치에 액세스 하는 것 처럼 작동 하 고 어떤 정적 저장소. 한편, 충분한 메모리(이 경우 6* sizeof(int) 바이트)를 사용할 수 없는 경우 이미 사용된 바이트 다음에 realloc() 전체 11* sizeof(int) 바이트의 메모리를 힙의 다른 곳에서 다시 할당하고 이전 메모리 블록에서 새 메모리 블록으로 콘텐츠를 복사합니다. 메모리 블록을 차단합니다.

Comments

comments