-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