gpt4 book ai didi

c++ - VC++中未初始化的内存块

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:21 24 4
gpt4 key购买 nike

众所周知,Visual C++运行时使用特殊的非零标记标记未初始化或刚刚释放的内存块。有没有办法完全禁用此行为而无需手动将所有未初始化的内存设置为零?由于 0xFEEEFEEE != 0,这对我的有效非空检查造成了严重破坏。

嗯,也许我应该解释得更好一点。我创建并初始化了一个变量(通过 new),一切顺利。当我释放它(通过删除)时,它将指针设置为 0xFEEEFEEE 而不是 NULL。当我插入对 NULL 的正确检查时,就像所有管理自己内存的好程序一样,我遇到了问题,因为 0xFEEEFEEE 传递了一个 NULL 检查没有问题。除了在删除它们时手动将所有指针设置为 NULL 之外,还有什么好方法可以检测内存何时已被释放?我宁愿不使用 Boost仅仅是因为我不想要开销,尽管它可能很小,因为这是我使用 Boost 的唯一目的。

最佳答案

当您创建一个指针时,将其显式初始化为NULL。同样在 delete 之后。依赖未初始化数据的值(少数特定情况除外)是自找麻烦。

通过使用智能指针类(例如 boost::shared_ptr ),您可以省去很多麻烦,它会自动处理指针是否已初始化。

关于c++ - VC++中未初始化的内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65724/

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