-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
'Feature newFeat =新しい機能(入力);これは有効かもしれませんが、においがします。なぜフィーチャーnewFeat(入力);やフィーチャー* newFeat =新しいフィーチャー(入力); – MikeCAT