일부 메모리를 malloc과 함께 할당합니다. 약 128 바이트입니다.Realloc이 null을 반환합니까?
나중에 약 200 바이트의 realloc을 호출하지만 null을 반환합니다!
내가 사용 가능하다면 유효한 포인터를 반환하고 다른 하나는 malloc이지만 realloc을 사용하고 싶습니다.
이 동작을 설명 할 수있는 것은 무엇입니까 (메모리가 부족하지는 않은 것 같습니다). 이것은 유효한 행동입니까?
코드 비트 :
//class constructor
size = 0;
sizeAllocated = DEFAULT_BUFFER_SIZE; //64
data = (char*)malloc(sizeAllocated * sizeof(char)); //data is valid ptr now, I've checked it
data[0] = '\0';
//later on:
//append function
bool append(char** data, const char* str, size_t strLen) {
if((size + strLen) >= sizeAllocated) {
sizeAllocated += strLen + 1 + BUFFER_ALLOCATION_STEP;
char* temp = realloc(*data, sizeAllocated * sizeof(char));
if(temp)
*data = temp;
return(temp != NULL);
}
EDIT : 고정. 내 클래스에 < < 연산자를 오버로딩했고 void가 아닌 this를 반환했습니다. 어떻게 든 이것은 모든 것을 고생하고 있었다! 왜 이런 일이 일어 났는지 설명 할 수 있다면 좋을 것입니다!
많이 할당/할당 해제 하시겠습니까? 그것은 힙 조각화를 일으키고 인접한 메모리를 제한 할 수 있습니다. 그것은 200b 무료로 찾을 수 없을 것 같지는 않지만. –
나는 꽤 적은 양을 할당합니다. 그리고 이것은 main() {} 내부에 첫 번째로 배치 된 경우에도 실패합니다. – Pubby
valgrind에 대한 직업처럼 보입니다. – bmargulies