2016-07-27 13 views
-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のエラーに関する記事のことがすでにたくさん知っているが、それは私が間違って何が起こっているのかを把握する助けにはなりませんでした。

+2

[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を投稿して、デバッグの手助けをお願いします。 – MikeCAT

+0

'imageFeatures.size());'余分な ')'のためにコンパイルエラーが発生します。 – MikeCAT

+0

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

答えて

0

だと思います。 Feature newFeat = new Feature(input) です。これにより、ヒープ上に新しいフィーチャーが割り当てられますが、アドレスは失われ、削除されません。 MikeCATの提案に従ってFeature* newFeat = new Feature(input)を使用してください。

関連する問題