-1
当我使用valgrind运行我的程序时,它给出了大小为8的错误的无效读取和写入。我已经打破了我的头,但我看不出有什么问题。使用Valgrind无效读取大小为8的数据
的Valgrind的错误发生在这个代码的最后和倒数第二行:
void MLPerceptron::returnOutputActivation(vector<Feature> imageFeatures,vector<double>& outputActivation){
int train = 1;
for (unsigned int i = 0; i<imageFeatures.size();i++){
activations[0] = imageFeatures[i].content;
feedforward(train);
activationsToOutputProbabilities();
setMinActivation(outputActivation,activations[2]);
}
}
void MLPerceptron::setMinActivation(vector<double>& minOutputActivation,vector<double> currentActivation){
for(unsigned int i=0;i<currentActivation.size();i++){
if(minOutputActivation[i] > currentActivation[i])
minOutputActivation[i] = currentActivation[i];
}
}
的载体在另一个函数初始化,然后提供给功能returnOutputActivations,这种情况发生在不同的文件在这里看到:
void MLPController:: createOutputProbabilitiesVectorTest(vector<vector<Feature> >& testSet){
unsigned int nOutputProbabilities = settings.mlpSettings.nOutputUnits;
vector<double> input;
input.reserve(nOutputProbabilities*nMLPs);
for(int j=0; j<nMLPs; j++){
vector<Feature>::const_iterator first = testSet[j].begin();
vector<Feature>::const_iterator last = testSet[j].begin()+numPatchesPerSquare[j];
vector<double> inputTemp = vector<double>(nOutputProbabilities, 10.0);
mlps[0][j].returnOutputActivation(vector<Feature>(first,last),inputTemp);
input.insert(input.end(),inputTemp.begin(),inputTemp.end());
}
Feature newFeat = new Feature(input);
newFeat.setLabelId(testSet[0][0].getLabelId());
inputTrainSecondLayerMLP.push_back(newFeat);
}
我知道已经有很多关于valgrind错误的帖子,但它并没有帮助我弄清楚发生了什么问题。
请发布一个[最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)来请求我们帮助调试。 – MikeCAT
'imageFeatures.size());''由于额外的'''会发出编译错误。 – MikeCAT
'功能newFeat =新功能(输入);'这可能是有效的,但气味。为什么不'Feature newFeat(input);'Feature * newFeat = new Feature(input);'? – MikeCAT