동적할당에 대한 함수사용시 종료하는 이유가 궁금합니다. 그리고 추가로하나...
화1이트
질문 제목 : 동적할당에 대한 함수사용시 종료하는 이유가 궁금합니다.동적할당에 대한 함수사용시 종료하는 이유가 궁금합니다.질문 내용 :
malloc, calloc, realloc모두...
가지고 있는 책이나, 인터넷을 둘러봐도 null을 반환하면 종료한다는 글만 있을 뿐,
다시 포인터를 구하려고시도하지는않더라구요.
한 번 시도했을때 이미 사용될 장소가 모자라기에 다시 시도할 가치가 없는 것인건가하고 추측은 해봅니다만,
이런 쪽으로 경험이 전무하다보니 그닥 상상이 가질 않습니다.
특히, 고가의 장비들이나 반드시 24시간풀가동해야하는 소프트웨어의 경우 메모리체크에 실패했다는 이유만으로
종료시킨다는 건 소프트웨어의 가격값을 못하는게 아닌가하구요.
실제로 가끔 고사양의 게임을 돌릴때같을땔 보면 가상메모리가 부족하다고 열심히 창올리면서 실행은 잘만 되더라구요 -_- ;
좀 느려서 그렇지...
줄이자면, 왜 동적메모리할당에 실패할시 재시도하지않고 프로그램을 종료하는가? 입니다.
그리고 두번째 질문.
전에 쓴 글에서 수다님께서 친절하게 답변해주셔서 여러모로 생각해보았습니다만,
int *a, *b;
a = (int *)malloc(sizeof(int)*20);
b = (int *)realloc(a,sizeof(int)*40);
free(a);
a = b;
이 성공적으로 수행될때(null인 값은 고려하지않음)
a와 b가 가리키는 포인터값이 동일하다면, a의 주소에 있는 메모리를 돌려보냈으므로
b에 추가로 늘린 메모리의 반이 뚝하고 날라가버리는게 아닌가하고 생각합니다만....
그렇게되면 마지막에 a가 가리키는 포인터값자체가 무의미해지는 것이 아닌가합니다.
그래서 제 생각으론
int *a, *b;
a = (int *)malloc(sizeof(int)*20);
b = (int *)realloc(a,sizeof(int)*40);
if(a!= b) free(a);
a = b;
처럼 if문으로 주소값이 같지않을때만 처리하도록하는게 맞지않을까 생각하고 있습니다.
a의 포인터가 b가 가진 범위내에 속하게된다는 건 a의 포인터를 구지바꾸지않아도 메모리확장이 가능하다는 말이므로
그런 조건까지는 붙일 필요가 없다고 생각되구요.