쓰레기 값은 아니지만, 이번에도 우리가 의도한 대로 결과가 나오지 않고 Hi, woojin이 두 번 나왔네요. 왜 그럴까요?
전역 변수 메모리는 프로그램이 끝날 때까지 사라지지 않습니다. 하나의 전역 변수를 이용하면 함수를 호출할 때마다 이 전역 변수를 공용합니다. 따라서 처음에 입력한 이름인 hwlee는 두 번째 입력한 이름인 woojin에 덮어 써집니다. 함수 호출을 통해서 얻은 이름 정보가 유지되지 않아 Hi, woojin이 두 번 나온 것이지요.
그렇다고 전역 변수를 매번 이름을 저장할 때마다 독립적으로 선언하는 것은 바람직하지 않습니다. 전역 변수는 최소화하여 사용하는 것이 메모리 효율이나 프로그래밍 복잡도 관점에서 바람직합니다.
지역 변수, 전역 변수 메모리를 사용해도 문제 해결이 되지 않았습니다. 결국 우리에게 필요한 것은 지역 변수, 전역 변수와는 또 다른 특별한 메모리 변수입니다. 지역 변수처럼 함수가 매번 호출될 때마다 새롭게 메모리가 할당되고, 전역 변수처럼 함수를 빠져나가도 사라지지 않고 유지되는 메모리가 필요한 것입니다.
변수의 생성과 소멸 시기를 개발자 의도에 따라 결정하려면 동적 메모리 할당을 해야 합니다. 동적 메모리 할당으로 변수를 생성할 때는 malloc() 함수를 사용하고, 변수를 소멸할 때는 free() 함수를 사용합니다.