【C语言】malloc,calloc,relloc异同示例

版权声明:本文为博主原创文章,如需转载请注明出处。

从我源博客那里搬过来的文章,边复习边搬家。

malloc

1
void * malloc(size_t _Size);

  malloc函数在堆中分配参数_Size指定大小的内存,单位:字节,函数返回void *指针。

calloc

1
void * calloc(size_t _Count, size_t _Size);

  callocmalloc类似,负责在堆中分配内存。

  第一个参数是所需内存单元数量,第二个参数是每个内存单元的大小(单位:字节),calloc自动将分配的内存置为0。

1
int *p = (int *)calloc(100, sizeof(int)); // 分配100个int

ralloc

  重新分配用malloc或者calloc函数在堆中分配内存空间的大小。

1
void * realloc(void *p, size_t _NewSize);

free

1
void free(void *p);

  free负责在堆中释放malloccalloc分配的内存。参数pmalloc返回的堆中的地址。

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()  
{

char *p = (char *)malloc(10); // 分配内存,但是没有赋初值
memset(p, 0, 10); // 这里需要手动赋值,下面的方法则不需要
char *p1 = (char *)calloc(10, sizeof(char)); // 分配内存,并自动设置为0

char *p2 = (char *)realloc(p1, 20); // 在原有内存基础上,在堆中间连续增加的内存
// 如果原有内存没有连续空间可拓展,那么会新分配一个空间,将原有内存copy到新空间,然后释放原有内存
// realloc和malloc,只分配内存,不进行赋值操作

char *p3 = (char *)realloc(NULL, 5); // 等价于mallco(5)

free(p);
free(p1);
free(p2);
free(p3);
return 0;
}