1 malloc
void *malloc( unsigned int num_bytes)
分配长度为num_bytes个字节的内存块,返回值为无类型指针,该指针指向所分配内存块的起始位置,因此利用该无类型指针赋值给其他类型的指针的时候,需要进行强制类型转换。
int *p = (int *)malloc(sizeof(int) * 20);
当内存分配失败时,返回空指针NULL。在使用malloc 分配内存之后,进行NULL判断是一个良好的编程习惯。
2 calloc
void *calloc( unsigned int num, unsigned int size)
在内存的动态存储区分配num个长度为size的存储块,返回指向该存储块起始地址的无类型指针,若返回失败,返回NULL。因此,同样需要对该函数返回值进行判断。
int *p = (int *)calloc(20, sizeof(int));
区别联系
calloc与malloc的一个相同点在于使用之后均需要free(指针),释放内存块。- 不同点在于
calloc分配内存之后,会自动将这一块的内存之初始化为0,而malloc则不会,分配内存的值为一些垃圾数值。因此,在使用malloc函数之后,我们一般要调用函数memset对内存进行初始化。
3 memset
void *memset(void *s, int ch, unsigned int size)
将s所指向的内存块的前size个字节全部设置为ch对应的ASCii值。 它是对较大数组或者结构体清零操作的最快方式。
memset(p, 0, 80);
4 realloc
void *realloc (void *p, unsigned int size);
如果已经通过malloc或者calloc获得了动态空间,想改变其大小,可以使用realloc函数重新分配,将p所指的动态空间大小改变为size,而p的值不变,如果重新分配不成功,返回NULL。原来空间的内容会保留。
C语言内存管理
572

被折叠的 条评论
为什么被折叠?



