C语言动态分配内存

初创建于: 2022-02-09 00:30

C语言的动态分配内存是十分重要的

主要有四个函数:

void *malloc(int num)
void *calloc(int num, int size)
void *realloc(void *address, int newsize)
void free(void *address)

malloc

void *malloc(int num)

在堆区分配一块指定大小的内存空间, 这块内存空间在函数执行完成后不会被初始化, 他们的值是未知的.

calloc

void *calloc(int num, int size)

在内存中动态地分配 num 个长度为 size 的连续空间, 并将每一个字节都初始化为 0. 所以它的结果是分配了 num*size 个字节长度的内存空间, 并且每个字节的值都是0.

name = (char *)calloc(200, sizeof(char));

realloc

void ralloc(void *address, int newsize)

该函数重新分配内存,把内存扩展到 newsize。

name = (char *)realloc(name, 100 * sizeof(char));

关于realloc函数, 需要注意原空间与新新申请的空间的关系.

char* str1 = (char*) calloc(10, sizeof(char));
char* str2 = (char*) realloc(str1, 20 * sizeof(char));

在以上程序中, str2是在str1的基础上扩充的, 因此str1~=str2,
但是在释放str1的空间后, str2也会失效.

free

void free(void *address)

该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。

所有使用 malloc 与 calloc 申请的内存空间都应该被释放, 否则会造成内存泄露, 十分严重.

posted @ 2023-01-09 23:24  昤昽  阅读(44)  评论(0编辑  收藏  举报