C언어 수업정리/4월 수업정리

4월 18일 void *malloc()함수, free()함수

송시혁 2013. 4. 18. 17:22

배열의 경우를 생각하면, 배열안에 있는 배열을 삽입하거나 

삭제하기는 굉장히 힘들다. 그런점을 보완하기 위하여 

동적변수를 사용한다.


void *malloc()

가르키는 곳이 정해지지 않은 것.

주소를 가지지만, int*, short*등.... 자료형이 정해지지 않은 포인터이다.


float *pd;

void *vp=0;

vp=&a;

int a=100;

있다고 가정.

vp= pd; 둘다 주소값을 가지므로 에러는아니다.

하지만 printf문에서 *vp라고 선언한다면 에러가 뜬다.

vp는 주소값을 가지고 있으나, vp는 자료형이 없다.

즉, "float to void", * ...등의 에러가 뜬다.

그래서 casting이 중요하다.

*((int*)vp) 으로 casting 해준다면 문제없이 결과가 출력된다.


*vp, ++vp= 또한 에러를 일으키나 캐스팅을 한다면 문제없다.


int *p = malloc(sizeof(int))

메모리의 크기를 알 수 있다.

free()= 메모리가 필요없을 때 free(p); 실제로 주소를 적어야한다.

NULL = malloc()메모리가 없으면 NULL을 반환.

casting