This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS:在 ti RTOS 中为 free()

Guru**** 1958595 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/756515/rtos-free-in-ti-rtos

工具/软件:TI-RTOS

您好!

我使用 malloc()为变量分配了动态内存。

然后、我想在使用后释放存储器。 所以我使用了 free()。 但是、在这之后、当我尝试访问变量时、我仍然会获得该值、但它不会被释放。

char * temp = malloc (10 * sizeof (char));

。 这里有一些代码用于为 temp 分配值。。

免费(临时);

printf (temp)->在这里、它仍然显示该值

FREE()当时是否不起作用?

此致、

Shyam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这是正确的行为。 对 free()的调用将相关的内存块标记为在堆内部未使用,但 free 不会尝试使您在应用程序中使用的指针无效,也不会以某种方式清除正在释放的内存块。 由程序员来使指针无效。 如果您的应用程序对释放的内存块中的内容敏感、那么用户也有责任清理它。

    希望这对您有所帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,拉格奇,
    感谢您的回复。
    "如果您的应用程序对释放的内存块中的内容敏感、那么用户也有责任清理它。"
    我使用了 free(),因为它释放了分配的不需要的内存。
    那么、您能不能说我将如何执行除此之外的清理?

    此致、
    Shyam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果你可以只是通知系统未使用的块可以被回收回堆、那么我的停止就在这里。
    在使用前、有一种使用动态存储器来检查指针的做法、尤其是当它作为参数传递时。 在这种情况下、在 FREE (PTR)之后、使其 ptr = NULL;可能会避免您使用已取消分配的块。 在这两种情况下、该块中剩下的任何内容都将保留在那里、直到下一次分配和使用。 如果你不能接受这种情况,我认为这是非常具体的情况,你可以把这个区块设置为零/在 FREE()之前的任何东西。
    希望这对您有所帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    FREE()只是释放堆的一部分,不会删除、擦除、零、xors、0xA5和0x5A、 等等
    free()释放意味着下一个 malloc()调用可以返回属于先前释放的内存块的地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Tomasz 清除我的查询。