저는 C++ 메모리 관리에 대한 책을 읽었습니다. 세부 사항이없고 잘 설명해줍니다. 그러나 나는 지금까지 해왔 던 프로그램을 가지고있다. 정말 큰 벡터 나 배열을 처리해야한다. 나는 혼란 스럽다. 나는 단지 대소 문자를 메모리에 할당하려고 결심했다.Malloc이 X 바이트를 할당하지 못하는 경우 Realloc을 사용하거나 Malloc을 다시 사용합니까? C++
제 질문은 malloc()
에 일정량의 데이터를 넣으려고하면 문제가 발생합니다. malloc()
을 다시 실행하고 더 적은 데이터를 할당하려고 시도하면 realloc()
을 사용합니까, 아니면 malloc()
을 다시 사용합니까? 나는 처음의 malloc()
가 실패 할 것이기 때문에 그것이 어리석은 질문처럼 들린다 고 생각한다, 전혀 malloced하지 않을 것이다. .. ??? 당신은 여전히 그것에 malloc()
를 사용할 수 있어야한다는 것을 의미합니까?
그래서 ... 어떤 것을 사용합니까? 아니면 다음 중 하나도 사용하지 않습니까? 첫 번째 malloc()
이 실패 할 경우
BYTE *allocptr;
allocptr = (BYTE*)malloc(2500000);
if (!allocArray)
{
allocptr = (BYTE*)malloc(1000000);
}
// program code
free(allocptr);
아니면 바이트의 적은 양을 사용해 realloc()
를 사용해야합니다 ... 는 대신 다시 malloc()
를 시도? 첫 번째 malloc()
이 allocptr이 NULL과 동일했다 경우 allocptr 동일 NULL ... 난에 malloc()
를 사용하지 수없는 것이다 2,500,000 바이트를 할당하지 않을 경우 때문에
BYTE *allocptr;
allocptr = (BYTE*)malloc(2500000);
if (!allocptr)
{
allocptr = (BYTE*)realloc(allocptr, 1000000);
}
// program code
free(allocptr);
나는이 질문을 부탁 해요 이유는 그것은 realloc()
대신에 realloc()
이 NULL과 같은 포인터를 가질 수 없다고 생각했기 때문입니다.
c++ realloc 당신은 무엇을 [realloc을 (HTTP에 대해 혼동하는 것 : // WWW. cplusplus.com/reference/cstdlib/realloc/)가 있습니다.메모리 블록이없는 경우 메모리 블록의 크기를 변경할 수 없습니다. – tkausl
@tkausl 네, 제가 읽고있는 책에서 읽었던 사실은 NULL이나 그와 비슷한 realloc 포인터를 사용할 수 없다는 점입니다. 도움을 주셔서 감사합니다. – MAXBD
'realloc'은 코드가 작동하지 않을 수 있도록 2 개의 매개 변수 (포인터와 크기)를 사용합니다. –