【发布时间】:2015-02-17 20:05:51
【问题描述】:
我正在编写一个库,并希望使其绝对与资源无关,这也意味着该库应该与用户提供的内存分配函数一起使用。库还允许用户设置自己的错误处理函数,这些函数以错误消息作为参数调用,如下所示:
typedef void (*error_handler)(const char* msg);
库代码自己准备错误消息,有点像这样(省略消息格式化失败的情况):
char buf[BUF_SIZE];
snprintf(buf, BUF_SIZE, "Oops found at file '%s' line %d", __FILE__, __LINE__);
但是我可以确定 snprintf 不会为 malloc 的内部使用分配更多内存,显然会绕过用户提供的分配例程吗?我的 Linux 系统中的手册页对此保持沉默。
【问题讨论】:
-
char* buf[BUF_SIZE];还是您的意思是char buf[BUF_SIZE];? -
我不知道如何避免它。
-
即使它在内部使用
malloc,只要它不泄漏内存,你为什么要担心? -
至少对于 newlib 仅用于格式化浮点数需要额外的内存。
-
如果您只需要添加文件名和行,您可以在编译时制作字符串...
标签: c memory-management stdio