在C语言中,动态内存分配是一种在程序运行时分配内存的方法,这种方法允许程序员根据程序的需要来分配和释放内存,而不是在编译时静态地分配固定大小的内存空间,动态内存分配主要通过四个函数来实现:malloc()
, calloc()
, realloc()
, 和 free()
。
1、malloc()
函数
malloc()
函数用于分配指定字节数的内存空间,它的原型如下:
void *malloc(size_t size);
size
是需要分配的内存空间的字节数,如果分配成功,malloc()
返回一个指向分配内存的起始地址的指针;如果分配失败,返回 NULL
。
示例:
#include <stdio.h> #include <stdlib.h> int main() { int *ptr; int n = 5; // 使用 malloc 分配内存 ptr = (int *)malloc(n * sizeof(int)); if (ptr == NULL) { printf("内存分配失败 "); exit(0); } else { printf("内存分配成功 "); } // 使用分配的内存 for (int i = 0; i < n; i++) { ptr[i] = i + 1; printf("%d ", ptr[i]); } // 释放内存 free(ptr); return 0; }
2、calloc()
函数
calloc()
函数用于分配指定数量的元素的内存空间,并将分配的内存空间初始化为0,它的原型如下:
void *calloc(size_t num, size_t size);
num
是需要分配的元素个数,size
是每个元素的字节数,如果分配成功,calloc()
返回一个指向分配内存的起始地址的指针;如果分配失败,返回 NULL
。
示例:
#include <stdio.h> #include <stdlib.h> int main() { int *ptr; int n = 5; // 使用 calloc 分配内存 ptr = (int *)calloc(n, sizeof(int)); if (ptr == NULL) { printf("内存分配失败 "); exit(0); } else { printf("内存分配成功 "); } // 使用分配的内存 for (int i = 0; i < n; i++) { printf("%d ", ptr[i]); } // 释放内存 free(ptr); return 0; }
3、realloc()
函数
realloc()
函数用于重新分配内存空间,它可以根据需要调整已分配内存的大小,它的原型如下:
void *realloc(void *ptr, size_t size);
ptr
是指向已分配内存的指针,size
是新的内存大小,如果重新分配成功,realloc()
返回一个指向新分配内存的起始地址的指针;如果重新分配失败,返回 NULL
。
示例:
#include <stdio.h> #include <stdlib.h> int main() { int *ptr; int n = 5; // 使用 malloc 分配内存 ptr = (int *)malloc(n * sizeof(int)); if (ptr == NULL) { printf("内存分配失败 "); exit(0); } else { printf("内存分配成功 "); } // 扩大内存空间 ptr = (int *)realloc(ptr, 10 * sizeof(int)); if (ptr == NULL) { printf("内存重新分配失败 "); exit(0); } else { printf("内存重新分配成功,现在可以存储10个整数 "); } // 使用分配的内存 for (int i = 0; i < 10; i++) { ptr[i] = i + 1; printf("%d ", ptr[i]); } // 释放内存 free(ptr); return 0; }
4、free()
函数
free()
函数用于释放已分配的内存空间,当不再需要已分配的内存时,应使用 free()
函数将其释放,以避免内存泄漏,它的原型如下:
void free(void *ptr);
ptr
是指向已分配内存的指针,释放内存后,ptr
将变为悬空指针,不应再使用。
示例:
#include <stdio.h> #include <stdlib.h> int main() { int *ptr; int n = 5; // 使用 malloc 分配内存 ptr = (int *)malloc(n * sizeof(int)); if (ptr == NULL) { printf("内存分配失败 "); exit(0); } else { printf("内存分配成功 "); } // 使用分配的内存 for (int i = 0; i < n; i++) { ptr[i] = i + 1; printf("%d ", ptr[i]); } // 释放内存 free(ptr); ptr = NULL; // 将指针设置为 NULL,避免悬空指针 return 0; }
在C语言中,动态内存分配是一种在程序运行时分配内存的方法,通过使用 malloc()
, calloc()
, realloc()
, 和 free()
函数,可以根据程序的需要动态地分配和释放内存空间,在使用动态内存分配时,需要注意检查分配是否成功,以及在不再需要已分配的内存时及时释放,以避免内存泄漏。
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/345848.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复