int main(void)
{
int *x; // 정수를 가르키는 포인터 변수 x를 생성
int *y;
// 4바이트의 공간을 요청
// 메모리덩어리를 할당
// 메모리 영역의 첫 주소를 반환
x = malloc(sizeof(int));
//*은 역참조 연산자, x에 저장된 주소로 가서 42를 저장
*x = 42;
// 아래 코드는 버그임
// y = x; 를 선언 후 가능
*y = 13;
}
포인터를 초기화시키지 않고 값을 저장하면 어떤 오류가 발생할 수 있을까요?
A. 위의 코드를 보면 y는 포인터로 선언 되었지만, 값을 초기화하지 않았다. 초기화되지 않은 *y는 프로그램 어딘가를 임의로 가리키고 있을 수도 있다. 그곳에 13이라는 값을 넣으면, 오류가 생길 수 있다.
메모리는 마치 사물함과 같다. 사용할 사물함의 개수를 정한 이후에는, 공간이 모자라도 주변 사물함을 마음대로 사용할 수 없다. malloc을 이용해서 이미 정의된 배열의 크기를 바꿀 수 있다.
이미 할당된 메모리의 크기를 조절할 때 임시 메모리를 새로 할당해줘야 하는 이유는 무엇인가요?
기존 메모리 주변 메모리는 이미 사용중일 수 있음으로,
안전하게 여유로운 공간에 새로 메모리를 만들고 옮기는 것.
연결리스트는 배열의 복사(temp)사용없이 추가할 수 있다.
그러나 index를 사용할 수 없다.
index는 메모리에서 연속적으로 자리할 때만 가능