C语言,为了防止堆内存溢出,使用check_size()或类似工具检查分配的内存大小, 请给出示例代码
时间: 2024-10-12 12:15:53 浏览: 18
在C语言中,为了避免堆内存溢出,确实可以自定义函数如`check_size()`来检查内存分配的大小。这个函数通常会在动态内存分配之后立即调用,检查分配是否成功并且内存大小是否在预设的安全范围内。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
void* check_size(size_t size, char* function_name) {
void* ptr = malloc(size);
if (ptr == NULL) {
fprintf(stderr, "%s(): Memory allocation failed for %zu bytes\n", function_name, size);
exit(EXIT_FAILURE); // 立即终止程序,因为无法继续运行
}
// 检查分配的内存大小是否超过预设的最大值
if (size > MAX_SIZE) {
fprintf(stderr, "%s(): Allocated memory exceeds maximum (%zu > %zu)\n", function_name, size, MAX_SIZE);
free(ptr); // 如果超过最大,尝试释放已分配的内存
exit(EXIT_FAILURE);
}
return ptr;
}
int main() {
int* arr = check_size(sizeof(int) * 5, "main"); // 分配数组元素的内存
// ... 使用arr...
free(arr); // 记得在不再需要内存时释放它
return 0;
}
```
在这个例子中,`check_size()`函数接受想要分配的内存大小和调用它的函数名称作为参数。如果分配失败或超过最大限制,会打印错误信息并退出程序。
阅读全文