- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在一些硕士学位项目中使用 C,但从未用它构建生产软件。 (.NET 和 Javascript 是我的生计。)显然,free()
内存的需要 malloc()
在 C 中至关重要。这很好,很好如果你能在一个例行程序中同时完成这两项,那就太好了。但是随着程序的增长和结构的加深,跟踪哪些内容被 malloc
在哪里以及哪些内容适合释放变得越来越困难。
我在互联网上四处寻找,只找到了一些通用的建议。我怀疑你们中的一些长期的 C 编码人员已经提出了自己的模式和实践来简化这个过程并将邪恶挡在你面前。
那么:您建议如何构建您的 C 程序以防止动态分配成为内存泄漏?
最佳答案
按契约(Contract)设计。确保每个函数注释都明确说明了它的内存卫生——也就是说,它是否 mallocs 以及它是否负责释放分配的内容,以及它是否拥有传入的任何内容的所有权。并与你的函数保持一致。
例如,您的头文件可能包含如下内容:
/* Sets up a new FooBar context with the given frobnication level.
* The new context will be allocated and stored in *rv;
* call destroy_foobar to clean it up.
* Returns 0 for success, or a negative errno value if something went wrong. */
int create_foobar(struct foobar** rv, int frobnication_level);
/* Tidies up and tears down a FooBar context. ctx will be zeroed and freed. */
void destroy_foobar(struct foobar* ctx);
我衷心赞同使用 Valgrind 的建议,它是跟踪内存泄漏和无效内存访问的真正出色的工具。如果您没有在 Linux 上运行,那么 Electric Fence是一个类似的工具,但功能较少。
关于c - 驯服 malloc/free 野兽——提示与技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2816940/
我是 boost 的新手,我正在尝试为 websocket 编写一个简单的聊天应用程序。作为引用,我正在使用 websocket-server-sync来自网站的示例。 我制作了一个存储 websoc
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我一直在一些硕士学位项目中使用 C,但从未用它构建生产软件。 (.NET 和 Javascript 是我的生计。)显然,free() 内存的需要 malloc() 在 C 中至关重要。这很好,很好如果
我是一名优秀的程序员,十分优秀!