realloc에 대해서 질문드립니다.
글쓴이: jyhme / 작성시간: 화, 2010/12/28 - 11:27오후
대부분 독학으로 지내는 대학교 2학년으로 올라가는 학생입니다.
제가 알기로는
1. 현재 위치에서 메모리증가가 가능하다면 그대로 사용한다.
2. 현재 위치에서 메모리증가가 불가능하다면 다른 위치에 새롭게 할당한다.
3. 메모리할당에 실패할 경우 NULL을 리턴한다.
라고 들었습니다.
그런데 만약, 정상적인 realloc의 사용에서 메모리부족 혹은 기타의 이유로 NULL을 리턴해버리면
기존의 데이터는 그대로 손실되는 것이 되지않습니까?
그렇게 본다면
1. 데이터를 백업한다.
2. realloc을 사용한다.
3. 성공하면 그대로 유지. 백업데이터 제거
4. 1회이상 실패하면 성공이후 백업데이터를 본 데이터로 복사
이런 과정을 거쳐야하는게 아닌가합니다.
혹시 제 생각이 잘 못된 것인지 답변부탁드립니다.
인터넷을 떠돌며 찾아보는 내용에서는 대부분 realloc의 실패에 대한 경우는 언급하지않더라구요.
scanf같은 것과 달리 데이터손실이 있는 만큼 상당히 중요한 것이라고 생각합니다만...;;
Forums:
man 3 realloc realloc()
man 3 realloc
realloc() returns a pointer to the newly allocated memory, which is suitably aligned for any kind of variable and may be different from ptr, or NULL if the request fails. If size was equal to 0, either NULL or a pointer suitable to be passed to free() is returned. ***If realloc() fails the original block is left untouched; it is not freed or moved.***
감사합니다!
많은 도움이 됬습니다.
실패하면 포인터는 그냥 두는 거였네요.
댓글 달기