在C语言中,库函数是预定义的一组函数,它们提供了许多基本操作,方便程序员进行开发。本节主要关注C库中的动态存储分配相关的函数,包括`malloc`、`free`、`realloc`和`calloc`,这些函数都包含在`malloc.h`头文件中。 1. `malloc()` 函数: `malloc()` 是一个动态内存分配函数,用于在程序运行时向系统申请指定大小的内存空间。它的语法是 `void *malloc(unsigned size)`,其中`size`参数表示需要分配的字节数。如果分配成功,`malloc`会返回指向分配内存起始位置的指针,如果分配失败(例如内存不足),则返回`NULL`。例如: ```c #include <stdlib.h> #include <stdio.h> int main() { char *string; string = malloc(_MAX_PATH); if (string == NULL) { printf("Insufficient memory available\n"); } else { // 使用分配的内存... free(string); printf("Memory freed\n"); } return 0; } ``` 2. `free()` 函数: `free()` 函数用于释放之前通过`malloc`、`calloc`或`realloc`函数分配的内存。其语法是 `void free(void *ptr)`,其中`ptr`参数是要释放的内存的起始地址。释放内存后,该内存块将可以被再次分配。例如: ```c #include <string.h> #include <stdio.h> #include <malloc.h> int main() { char *str; str = malloc(10); strcpy(str, "Hello"); printf("String is %s\n", str); free(str); // 释放内存 return 0; } ``` 3. `realloc()` 函数: `realloc()` 用于改变已分配内存的大小。它可以扩大或缩小内存块的容量,同时保持原有的数据。其语法是 `void *realloc(void *ptr,unsigned newsize)`,`ptr`是原始分配的内存指针,`newsize`是新的大小。如果成功,它返回指向新分配内存的指针,失败则返回`NULL`,且原有内存不会被释放。需要注意的是,如果`realloc`扩大内存并失败,原有的内存仍然有效,所以最好先复制原内存到临时变量,再调用`realloc`。例如: ```c #include <stdio.h> #include <malloc.h> #include <stdlib.h> int main() { long *buffer; size_t size; if ((buffer = (long *)malloc(1000 * sizeof(long))) == NULL) exit(1); size = _msize(buffer); printf("Size of block after malloc of 1000 longs: %u\n", size); // 扩大内存 if ((buffer = realloc(buffer, size + (1000 * sizeof(long)))) == NULL) exit(1); size = _msize(buffer); printf("Size of block after realloc of 1000 more longs: %u\n", size); free(buffer); exit(0); } ``` 4. `calloc()` 函数: `calloc()` 函数用于一次性分配多个元素的内存,每个元素的大小由`elsize`指定,元素的总数由`nelem`指定。它会返回指向分配内存起始位置的指针,并且分配的内存会被初始化为0。其语法是 `void *calloc(size_t num, size_t size)`。例如: ```c #include <stdio.h> #include <malloc.h> int main() { long *buffer; buffer = (long *)calloc(40, sizeof(long)); if (buffer != NULL) printf("Allocated 40 long integers, each initialized to 0\n"); else printf("Memory allocation failed\n"); free(buffer); return 0; } ``` 这些函数是C语言中处理动态内存的重要工具,理解并熟练使用它们对于编写高效、可靠的C程序至关重要。程序员应始终确保在不再需要内存时调用`free`,以防止内存泄漏,并注意在内存操作中避免野指针和悬垂指针的问题。在实际编程中,合理使用内存管理函数能够提高程序的灵活性和性能。
- mycsd_7202011-11-29PPT格式的介绍。 最直观的就是这个了
- 粉丝: 473
- 资源: 72
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助