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