微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这段代码会导致运行时无限分配吗?

如何解决这段代码会导致运行时无限分配吗?

struct trie_node
{
    trie_node() : is_leaf{true},children(26),c{' '} {};
    bool is_leaf{false};
    std::vector<trie_node> children;
    char c{' '};
};

int main(int argc,char const *argv[])
{
    trie_node t;
}

当我尝试编译上面的代码时,它编译正确。但是,在检查代码时,由于成员变量 childrentrie_node 的向量,因此分配似乎存在无限循环。因此,当创建 t 时,它将创建一个大小为 26 的向量 trie_node 对象,并且这 26 个元素中的每一个将依次创建另一个大小为 26 的向量 trie_node 对象和很快。我的理解正确吗?如果是这样,为什么编译器不为此给出警告或错误

解决方法

是的,你的理解是正确的。

为什么编译器不会为此给出警告或错误?

你的代码是语法正确的 C++ 代码,所以错误是不可能的。

要对此发出警告,编译器必须检测到问题。由于分配隐藏在几个抽象层中,因此很难设计和实现能够可靠地检测这种情况的算法。也不值得这样做,因为它会 1. 是非常罕见的情况 2. 无论如何都会在运行时立即检测到。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。