1. malloc()
函数:分配内存
malloc()
函数(memory allocation的缩写)用于在运行时分配一块指定大小的内存块。它位于<stdlib.h>
头文件中。其基本语法如下:
#include <stdlib.h>
void *malloc(size_t size);
size
:要分配的内存块的字节数。
以下是使用malloc()
函数分配内存的示例:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
int num = 5;
ptr = (int *)malloc(sizeof(int)); // 分配4字节大小的内存
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
*ptr = num;
printf("Value: %d\n", *ptr);
free(ptr); // 释放内存
return 0;
}
2. free()
函数:释放内存
free()
函数用于释放之前通过malloc()
分配的内存块,以便系统可以重新利用这些内存空间。释放后的指针不应再被访问,否则会导致未定义的行为。
#include <stdlib.h>
void free(void *ptr);
以下是使用free()
函数释放内存的示例:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
ptr = (int *)malloc(sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
*ptr = 42;
printf("Value: %d\n", *ptr);
free(ptr); // 释放内存
// 此后 ptr 不应再使用
return 0;
}
3. 注意事项
动态分配的内存需要手动释放,否则会造成内存泄漏。
释放内存后,对指针的任何访问都是不安全的。
malloc()
和free()
配对使用,不要重复释放同一块内存。使用
calloc()
可以分配并初始化内存。
4. 原理与内存碎片
malloc()
函数的实现依赖于操作系统的内存管理机制。它从操作系统获取一块足够大的内存,并将其划分为适当大小的块,以满足分配请求。当使用free()
函数释放内存时,这些块可能会重新合并,但也可能会导致内存碎片,从而影响性能。
5. 结论
malloc()
和free()
函数是C语言中进行动态内存分配的核心函数。通过动态分配内存,可以根据需要分配和释放内存,提高程序的灵活性和效率。但要注意适当地释放内存,以避免内存泄漏和潜在的问题。希望本文能帮助读者更好地理解和应用malloc()
和free()
函数。