Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;内存错误_C++_Memory_Reference - Fatal编程技术网

C++ C++;内存错误

C++ C++;内存错误,c++,memory,reference,C++,Memory,Reference,当我编译代码时,我反复得到错误 free(): invalid next size (fast) 然而,代码仅限于创建引用。具体地说,注释掉一行似乎可以修复错误;然而,这是一条非常重要的路线 void neuron::updateWeights(layer &prevLayer) { for(unsigned i = 0; i < prevLayer.size(); i++) { double oldDeltaWeight = prevLayer[i].m

当我编译代码时,我反复得到错误

free(): invalid next size (fast)
然而,代码仅限于创建引用。具体地说,注释掉一行似乎可以修复错误;然而,这是一条非常重要的路线

void neuron::updateWeights(layer &prevLayer) {
    for(unsigned i = 0; i < prevLayer.size(); i++) {
        double oldDeltaWeight = prevLayer[i].m_connections[m_index].m_deltaWeight;
        double newDeltaWeight = eta * prevLayer[i].m_output * m_gradient + alpha * oldDeltaWeight;
        prevLayer[i].m_connections[m_index].m_deltaWeight = newDeltaWeight; // THIS LINE
        prevLayer[i].m_connections[m_index].m_weight += newDeltaWeight; 
    }
}
void neuron::updatewights(层和层){
for(无符号i=0;i
任何帮助都将不胜感激

编辑: 附加代码 //标题 #包括“../../include/neuralNet.h”

//库
#包括
#包括
#包括
//名称空间
使用名称空间std;
//类构造函数
神经元::神经元(无符号索引,无符号输出){
m_指数=指数;
for(无符号i=0;i1
}
//传递函数求导法
双神经元::传递函数导数(双x)常数{
返回1-x*x;//tanh的导数
}
//设定输出值
无效神经元::设置输出(双值){
m_输出=值;
}
//向前传播
void neuron::重新计算(层和上一层){
双和=0.0;
for(无符号i=0;i
这里也叫这条线

 // Update weights
    for(unsigned layerIndex = m_layers.size() - 1; layerIndex > 0; layerIndex--) {
        layer &currentLayer = m_layers[layerIndex];
        layer &previousLayer = m_layers[layerIndex - 1];

        for(unsigned i = 1; i < currentLayer.size(); i++) {
            currentLayer[i].updateWeights(previousLayer);
        }
    }    
//更新权重
对于(unsigned layerIndex=m_layers.size()-1;layerIndex>0;layerIndex--){
图层¤tLayer=m_图层[layerIndex];
图层&previousLayer=m_图层[layerIndex-1];
for(无符号i=1;i
您的构造函数初始化类中的N个“输出”m_连接

但是你有很多地方叫:

m_connections[m_index]
如果m_index>输出会发生什么?这在你的问题中可能吗? 尝试在构造函数的第一行中包含assert():

assert(index < outputs)
assert(索引<输出)

您可能在某个地方的指针访问不正确。

请详细说明您的问题。目前还不清楚你是如何解决这个问题的,因此我们无法帮助你。您可能希望阅读一些好的问题,以便更好地了解我们在堆栈溢出上希望看到的问题类型。此外,你可能会发现创建一个有帮助的页面,因为你提供的例子很少,但既不完整也不可验证。希望这有帮助?自从给prevLayer[I].m_connections[m_index].m_deltaWeight分配了一个值之后,我非常迷茫。m_deltaWeight会抛出一个错误,但从中检索一个值却不会。这是一个运行时错误(从C库中),而不是编译错误。而且你发布的代码不是一个错误。@Brian具体地说,注释掉一个特定的行似乎可以修复错误——给定这一行,错误不是“修复的”,只是被掩盖了,因为你很可能已经损坏了内存。您所做的只是将错误从代码的一部分移动到代码的另一部分。我建议您保留该行,并实际修复错误。@Brian
m\u connections[m\u index]
--将所有这些更改为
m\u connections.at(m\u index)
--如果您现在抛出
std::out\u of\u range
异常,请不要感到惊讶。
assert(index < outputs)