2013-05-22 3 views
5

배열의 크기를 동적으로 늘리려고합니다. 배열의 끝에 추가 공간을 추가하거나 제거하는 표준 C 또는 C++ 함수가 있습니까? 힙의 끝에 충분한 공간이 있다는 것을 보장 할 수 없기 때문에 이것은 어렵습니다. 그러나 이것이 운영 체제의 일이되어서는 안됩니까?동적으로 배열 크기를 늘리거나 줄입니다.

+1

C에서 '[void * realloc (void * ptr, size_t size);'] (http://www.cplusplus.com/reference/cstdlib/realloc/) 함수는 –

+2

에 대해 다음과 같이 생각해야합니다. 어떤 언어로 프로그램을하고 있는가? C에서는'realloc'을 사용합니다. C++에서는'std :: vector'를 사용합니다. –

답변

5

당신이 찾고있는이 기능은, 당신은 또한 관련 캡슐화 std::vector 같은 표준 컨테이너 갈 수 또한 C++를 언급 한 바와 같이 std::realloc

것처럼 C의 ++의 STL에 존재하는 C에서 realloc()입니다 메모리 관리.

+0

크기가 작아지지 않습니다 ** ** ** –

+0

글쎄, 내가 이전에 가지고 있던 것보다 작은 크기를 입력하면 줄어 듭니다. 아니면 불가능한가요? –

+1

@GrijeshChauhan 배열의 이전 크기보다 새로운 크기를 지정할 수 있습니다. C 표준은'realloc()'이 ptr이 가리키는 이전 객체의 할당을 해제하고 size로 지정된 크기를 가진 새로운 객체에 대한 포인터를 반환한다는 것을 (7.20.3.4) 지정하고 새로운 객체의 내용은 최대 min (oldSize, newSize)까지 동일합니다. – JBL

0

C 함수가 없습니다. 당신은 C++ 컨테이너에 갈 수 있습니다. 여기에는 배열, 목록 등이 있습니다.

0

아마도 할당 된 배열에서 메모리 청크를 추가/해제하는 방법으로 자신의 메모리 관리 래퍼를 작성하면됩니다.

0

교수님과 엔지니어 (몇 년에 걸쳐 실제 직업이있는 사람들)가 많은 실험을 한 후에 배열을 확장 할 때, 다른 정보를 알려주지 않는 한 50 % 확장하십시오. realloc()은 모두 무거운 짐을도 수행합니다 (다음에 설명합니다). 인터넷에서 : -> realloc() 함수는 ptr이 가리키는 메모리 블록의 크기를 size 바이트로 변경합니다. 내용은 영역의 시작부터 이전 및 새로운 크기의 최소값까지의 범위에서 변경되지 않습니다. 새 크기가 이전 크기보다 큰 경우 추가 된 메모리가 초기화되지 않습니다. ptr이 NULL이면, size의 모든 값에 대해 호출은 malloc (size)와 동일합니다. size가 0이고 ptr이 NULL이 아니면 호출은 free (ptr)와 같습니다. ptr이 NULL이 아니라면 malloc(), calloc() 또는 realloc()에 대한 이전 호출에 의해 리턴되어야합니다. 지시 된 영역이 이동되면 자유 (ptr)가 수행됩니다.

관련 문제