free()함수의 정확한 용법 ( realloc함수와 free함수의 관계)
569
작성한 질문수 5
답변 1
3
안녕하세요?
좋은 질문입니다. 꼼꼼하게 공부하고 계신 것 같네요.
free() 함수는 운영체제에게 메모리를 반납하는 것이 맞습니다. 만약에 운영체제가 그 메모리를 다른 곳에 사용하지 않았다면 같은 주소에 같은 데이터가 계속 남아있는 것을 우연히 볼 수도 있겠지요. 그러나 어디까지나 free()를 한 후에 다시 그 메모리를 접근하는 것은 운영체제 입장에서는 무단침입입니다. 아침에 이사나간다고 집주인에게 열쇠까지 반납해놓고 저녁때 무단침입한 것과 같습니다.
메모리 관리는 운영체제의 주요 업무입니다. 우리가 만드는 프로그램은 모두 운영체제의 관리를 받으면서 작동합니다. 프로그래밍 언어의 문법은 운영체제가 어떻게 작동할 것이다까지 약속할 수 없습니다.
realloc()은 강의에서 설명을 드렸을 텐데 내부적으로 free()를 할 수도 있고 하지 않을 수도 있습니다. 이것도 결국 운영체제가 판단하는 것이기 때문에 프로그래밍 문법 차원에서 어떤 상황에서 결과가 어떻게 되어야 한다고 강제할 수 없습니다.
참고로 포인터는 주소라고 가르치기는 하는데 사실은 가상의 주소입니다. 따라서 메모리의 진짜 어디에 있는 지 조차 운영체제만 압니다. 메모리 관리를 운영체제가 어떻게 하는지 구체적인 내용에 대해서는 운영체제 과목의 영역이며 윈도우, 리눅스, 맥OS 등이 모두 다릅니다.
0
아하 그렇다면 realloc()함수는 운영체제 아래에서 유동적인 성격을 뛰는군요. 두번째 사진과 같은경우 해당 메모리에 접근이 가능했으니 free()가 쓰이지 않은 것이지요 ?? 그런데 교수님 realloc()함수가 운영체제 아래에서 어떤식으로 기능할지 모른다면 realloc()의 인자였던 포인터에 대해서는 마지막에 free()를 해주어야 하는것이 좋은가요? 정성스러운 답변 정말 감사합니다.
0
Realloc()이 성공했다면 유효한 주소를 받았겠지요 (공부용 예제 정도로는 항상 성공합니다) 그렇다면 당연히 다 사용한 후에는 free 해줘야합니다. Realloc 함수 설명을 검색해서 보시면 실패시에는 nullptr을 반환해준다고 하네요.
Export template 안됨
1
49
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
73
3
main 함수에서 왜 int만 선언이 되는걸까요
1
65
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
65
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
66
2
Visual Studio Community 2026 사용 문의
1
154
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
98
3
강의자리ㅛ
1
87
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
121
2
소스파일안에 여러 파일
1
81
2
F5와 F7의 차이
1
85
2
c = TWO * (a+b); 에서 a와 b는?
1
64
2
; 세미콜론을 붙이는 기준에 문의
1
74
1
Step over 기능 문의
1
58
2
2.6 강의 따옴표 출력 규칙 문의
1
82
2
int main 함수 관련 오류 문의
1
72
2
13.4 words[0]
0
66
2
11.7 함수를 구현해 봤습니다.
1
66
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
70
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
59
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2





