您的位置:首页 > 其它

关于malloc calloc realloc的用法

2010-04-30 19:40 459 查看
关于三个函数的定义:

void* realloc(void* ptr, unsigned newsize);

void* malloc(unsigned size);

void* calloc(size_t nelem, size_t elsize);

都在stdlib.h函数库内。

1.对于malloc函数,是分配size大小的空间,由于是void * ,所以分配好后要在前面加上你需要用的类型,如

char *p = (char *) malloc(256*sizeof(int));

这里有个注意点就是,malloc分配的空间并没有清零过,所以,这些空间中原来有什么,还是有什么,分配好后要注意清空。

2.对于calloc函数,它的用法与malloc一样,只是这里的参数的意思是这样的,分配nelem块elsize大小的空间,当然用的时候也要指定你需要的类型,如

char *p = (char *) calloc(10, 256*sizeof(int));

当然,这nelem块内存单位是相邻的,这里比malloc多了一个优点就是,calloc分配后的空间是清0过的。

3.对于realloc函数,它分配后的空间地址不能保证不变,因此realloc的操作有些不一样,如

char *p = (char *) realloc(p, old_size + new_size);这里对p再分配空间的地址必须赋值给p,由于realloc是在堆上进行空间分配的,它会重新找到一块空间为要求的old_size+new_size大小的空间返回,因此可能地址不是原来的p指向的地址了,要重新把返回的地址赋值给p,这里当realloc第一个参数为0时,相当于重新用malloc分配old_size+new_size大小的空间给p,并且都清0了。当第一个参数不为0时,如果空间不够old_size+new_size的话,也就是分配失败,那么,保持原来的空间位置和大小不变。当然如果第一个参数不是NULL,而第二个参数是0的话,这里就会产生游离指针了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: