gpt4 book ai didi

C++ 运行时错误 : free(): invalid next size (fast)

转载 作者:行者123 更新时间:2023-11-30 05:07:01 27 4
gpt4 key购买 nike

我看过很多关于这个错误的帖子,但是我一直没能找到解决办法。在我的代码中,我有一个“基因” vector ,每个基因都包含一个整数形式的源和目的地。

我想创建一个整数 vector ,其中包含基因 vector 中源和目标的所有不同可能值。我首先检查每个基因并确定来源和目的地,然后检查该 ID 是否已存在于载体中。如果是,则忽略它,但如果它是一个新值,则将其添加到 vector 中。

void addMutations(vector<Gene*>* genome){
vector<int> nodeIDs;

for(int i = 0; i < genome->size(); i++){
int src = genome->at(i)->sourceNeuronID;
int dst = genome->at(i)->destinationNeuronID;

if(find(nodeIDs.begin(), nodeIDs.end(), src) == nodeIDs.end()){
nodeIDs.push_back(src);// <-- Issue is here
}

if(find(nodeIDs.begin(), nodeIDs.end(), dst) == nodeIDs.end()){
nodeIDs.push_back(dst);// <-- Probably here too
}
}

问题是否来自 srcdstfor 循环迭代结束时超出范围?

最佳答案

Does the issue come from the fact that src and dst go out of scope at the end of iteration of the for loop?

不,这些 valuea 在超出范围之前被插入 vector 中,所以这没问题。

C++ Runtime Error: free(): invalid next size (fast)

这意味着堆已损坏。 Valgrind 在这种情况下会很有帮助。

内存错误不是来自 std::vector,而是来自您的指针。在某个地方,你释放了一些你不应该释放的东西?这可能是由于您的内存分配不当造成的(某些内容未按您的意愿分配)。谁知道您发布的代码。

无论如何,您真的应该使用 Valgrind 来追踪该错误


PS:真的需要用那么多指针吗?我的意思是在您的函数中,您可以通过引用传递 vector ,如下所示:

void addMutations(vector<Gene*>& genome) {

然后做:

genome.at(i)->sourceNeuronID;

等等。

指针很棒(例如在多态性中),但您应该谨慎使用它们,当然,在需要时使用它们(Pan Metron Ariston)。

关于C++ 运行时错误 : free(): invalid next size (fast),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47668630/

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