从系统堆申请分配内存
以malloc为例:
声明:
void * malloc(unsigned int size);
size为所需字节数;
若分配正常,返回值为指向void的指针,应将其强转为所需类型;
若分配不正常,返回值为NULL的指针;
至于calloc,大致相同:
void * calloc(unsigned int num, unsigned int size);
num为所需数据类型的数据总个数;
size为每个所需数据类型的数据占字节数;
注:一定要检查是否分配成功
例:
int *p = (int*) malloc(10 * sizeof(int));
int *p = (int*) calloc(10, sizeof(int));
if(!p) { //if(p == NULL)
printf("Fail\n");
return 0;
}
realloc:扩大或缩小已分配的内存
void* realloc(void* ptr, size_t size)
ptr为被更改指针
size为新大小
返回值才是新的指针,原指针不会变动
释放已申请的内存
void free(void * p);
注:
free后请将p赋值NULL,避免归还后误用;
不再使用的内存请归还,否则原指针更新后就再找不到原来未释放的地址,也无法释放这些内存了;