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

메모리 블록을 차단합니다. 이 경우 ptr 변경으로 가리키는 주소입니다. realloc 는 ptr로 가리키는 이전 개체를 할당하고 크기별로 지정된 크기를 가지는 새 개체에 대한 포인터를 반환합니다. 새 개체의 내용은 할당 할당 이전의 이전 개체의 내용과 동일하며 새 크기와 이전 크기의 내용까지 동일합니다. 이전 개체의 크기를 초과하는 새 개체의 바이트에는 확정되지 않은 값이 있습니다. ptr이 null 포인터인 경우 realloc()은 지정된 크기의 malloc()과 동일합니다. malloc() 및 calloc()를 사용하여 일부 메모리를 할당했지만 나중에 메모리가 너무 크거나 너무 작다는 것을 알게되었습니다. realloc() 함수는 이전 데이터를 잃지 않고 할당된 메모리의 크기를 조정하는 데 사용됩니다.

구문은 다음과 같은 데다 나중에 할당된 메모리의 크기를 늘려 6개의 정수를 더 저장하려고 한다고 가정합니다. 이렇게 하려면 메모리의 6 x sizeof(int) 바이트를 추가로 할당해야 합니다. realloc() 함수를 호출하여 6x sizeof(int) 바이트의 메모리를 할당하는 방법은 다음과 같습니다. 0 크기에 대한 지원은 C11 DR 400에서 더 이상 사용되지 않습니다. 이 경우 충분한 메모리(이 경우 6* sizeof(int) 바이트를 사용할 수 있는 경우 이미 사용된 바이트 다음에 realloc() 함수는 이미 사용된 바이트 옆에 6* sizeof(int) 바이트만 할당합니다. 이 경우 ptr이 가리키는 메모리는 변경되지 않습니다. 이렇게 하면 이전 데이터가 손실되지 않지만 새로 할당된 바이트는 초기화되지 않습니다. struct register_assignment{ 긴 서명되지 않은 class_id; char logic_name[16]; } 라[10]; realloc() 함수는 ptr로 가리키는 메모리 개체의 크기를 크기별로 지정된 크기로 변경합니다. 개체의 내용은 새 크기와 이전 크기의 크기보다 작을 때까지 변경되지 않습니다. 메모리 개체의 새 크기에 개체의 이동이 필요한 경우 개체의 이전 인스턴스화에 대한 공간이 해제됩니다. 새 크기가 큰 경우 개체의 새로 할당된 부분의 내용을 지정하지 않습니다.

크기가 0이고 ptr이 null 포인터가 아닌 경우 가리키는 개체가 해제됩니다.