if (strcmp(temp, "end") == 0) break; len += strlen(temp) + 1;//*** pt = (char*)realloc(ps, len); if (pt == NULL) { printf("메모리가 부족합니다.\n"); break; }
ps = pt; strcat(ps, temp); strcat(ps, " ");
} printf("%s\n", ps); free(ps);
return 0; }
추가문제
1. 정적 할당과 동적 할당의 차이를 설명하시오. 동적 할당의 장점은 무엇인가?
-정적 할당: 변수선언, 배열선언, 객체선언을 통해 메모리를 확보하는 방법으로, 코딩중에 미리 필요한 메모리를 예상해서 확보한다. 스택영역에 할당되어 함수가 종료되거나 변수 영역을 벗어나면 자동으로 공간이 해제된다. -동적 할당: 프로세스가 실행과정 중에 필요한 메모리를 운영체제에 요구해 할당 또는 해제가능하다. -동적 할당의 장점 : 상황에 따라 원하는 크기만큼의 메모리가 할당되고, 이미 할당된 메모리도 크기변경이 언제든 가능하므로 경제적이다.(유동적인 데이터관리)
2. void 포인터를 설명하시오.(15장 475페이지 참고할 것) -가리키는 자료형이 정해지지 않은 포인터이다. void는 가리키는 자료형을 결정하지 않겠다는 뜻이므로, 모든 주소를 저장할 수 있지만 간접참조 연산이나 정수연산은 불가능하다
3. malloc함수의 반환형이 void *이므로 반드시 형 변환하여 사용해야한다. 이유를 설명하시오. -malloc 함수는 확보된 기억공간이 어떤 용도로 사용될지 알 수 없으므로 void * 형태로 리턴하는데, 이 포인터를 사용할 때는 용도에 맞게 형변환을 해주어야 한다. (나중에 메모리에 접근할 때 얼마만큼의 메모리를 읽을 것인지를 판단하기 위해서이다. 예를 들어 int*의 경우 메모리 참조를 할 때 메모리 영역을 4byte만큼만 읽는다.)
4. free함수로 메모리를 해제하지 않으면 어떻게 되는가? -프로그램이 실행되는 동안에는 할당된 메모리가 사용되지 않는 중에도 계속 남아있게 된다.
5. 힙과 스택 영역에 대하여 설명하시오. -힙: 동적으로 할당하는 메모리 공간. -스택: 함수 호출시 생성되는 지역변수와 매개변수가 저장되는 영역. 함수 호출이 완료되면 사라짐.
6. 문자열을 입력 받고 저장한 후 화면에 출력해주는 프로그램을 작성하고자 한다. 문자열의 크기를 미리 알 수 없으므로 먼저 사용자로부터 문자열 크기를 입력받아 필요한 메모리를 동적 할당 후 문자열을 저장하도록 프로그램을 작성하시오.
#include<stdio.h> #include<stdlib.h> int main() { char *str; int len;