关于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的话,这里就会产生游离指针了
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的话,这里就会产生游离指针了
相关文章推荐
- calloc、malloc、realloc的用法与区别
- malloc、calloc、realloc的用法及区别
- malloc calloc realloc 作用、用法、区别、实现原理
- Linux 内存分配,malloc(), free(),calloc(),realloc()用法
- malloc,realloc,calloc的用法及区别
- malloc、realloc、calloc的用法,作用,区别,及实现原理
- malloc realloc calloc用法小结
- malloc与calloc,realloc动态内存的用法
- 关于malloc、free、new、delete以及calloc、realloc基本库函数与运载符的含义
- malloc calloc realloc 作用、用法、区别、实现原理
- malloc、realloc、calloc的一些用法
- C语言 calloc, malloc, realloc ,alloca以及 free的用法
- realloc,malloc与calloc的用法[转]
- Malloc(),realloc(),calloc(),free()的用法及含义
- malloc,realloc,calloc用法
- malloc/calloc/realloc/free与new/delete对比
- calloc(), malloc(), realloc(), free(),alloca()
- C 语言中 malloc、calloc、realloc 和free 函数的使用方法
- 浅谈malloc与 calloc、realloc、new 的区别
- alloca/malloc/calloc/realloc/sbrk/new/delete