这段代码在运行时是否导致无限分配?


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被创建时,它将创建trie_node对象的大小为26的向量,并且这26个元素中的每一个将依次创建trie_node对象的大小为26的另一个向量,以此类推。我的理解对吗?如果是这样,为什么编译器不给出警告或错误?

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

为什么编译器没有给出警告或错误?

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

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

最新更新