C 运行时错误:Free():下一个大小无效(快速)
C++ Runtime Error: free(): invalid next size (fast)
我已经看到了有关此错误的mutliple帖子,但是我无法找到解决方案。在我的代码中,我有一个"基因"的向量,每个基因都以int的形式包含一个源和目的地。
我想创建一个int的向量,该向量包含基因向量中源和目的地的所有不同可能值。我首先要浏览每个基因并确定源和目的地,然后检查该ID是否已经存在于向量中。如果确实如此,请忽略它,但是如果它是一个新值,则将其添加到向量。
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
}
}
问题是否来自src
和dst
在for
环路结束时脱离范围的事实?
问题是否来自
src
和dst
在For Loop的迭代结束时脱离范围的事实?
否,这些价值被推入矢量,在脱离范围之前,这很好。
c 运行时错误:free():无效的下一个大小(fast)
这意味着堆被损坏。在这种情况下,Valgrind可能会有所帮助。
该内存错误不是来自std::vector
,而是来自您的指针。在某个地方,您可以释放您不应该的东西?这可能是由您代表您的记忆分配不良引起的(您希望的是没有分配的东西)。谁知道您发布的代码。
在任何情况下,您应该真正使用Valgrind来跟踪该错误。
ps:您真的需要使用这么多指针吗?我的意思是在您的功能中,您可以通过引用通过您的向量,例如:
void addMutations(vector<Gene*>& genome) {
然后做:
genome.at(i)->sourceNeuronID;
等等。
指针很棒(例如,在多态性中),但是您应该谨慎使用它们,当然,在需要时使用它们(Pan Metron Ariston)。
相关文章:
- 大量序列中核苷酸类型的快速计数
- 为什么比较运算符如此快速
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- C++: free(): 无效的下一个大小(快速)
- free():多次调用后下一个大小(快速)无效
- 将矢量<int>推入矢量<矢量<int>>时,SIGABRT - free():下一个大小无效(快速)
- free(): 无效的下一个大小 (快速): 0x0000000000f45160 ***.
- C 运行时错误:Free():下一个大小无效(快速)
- 释放内存失败:free():下一个大小无效(快速):
- 有人能向我解释一下我的代码的哪一部分导致***检测到glibc***吗/a2:free():无效的下一个大小(快速)
- glibc 检测到 free() 无效大小(快速)错误
- 内存错误: free(): 下一个大小无效 (快速)
- glibc 检测到 *** ./burcu.exe: free(): 无效的下一个大小 (快速): 0x00000000
- C++错误:Free()下一个大小无效(快速)
- C++错误消息free():下一个大小无效(快速)
- c++ free():无效的下一个大小(快速)
- free()下一个大小无效(快速)-C++内存错误
- Linux中的c++运行时错误::glibc检测到free():无效的下一个大小(快速):堆栈具有void ptr元素
- 如何找到错误: *** './a.out' 中的错误: free(): 无效的下一个大小 (快速): 0x09767150 ***
- free(): Cpp中下一个大小(快速)无效