gpt4 book ai didi

c - 驯服 malloc/free 野兽——提示与技巧

转载 作者:太空狗 更新时间:2023-10-29 16:43:17 26 4
gpt4 key购买 nike

我一直在一些硕士学位项目中使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com