1

OSX 10.7、XCode4。

小さな問題がありvector<vector<float>>ます。選択プロセスの後で、2Dを3Dベクトルにプッシュバックする必要があります。stl::vectorテンプレートのpush_back関数でEXC_BAD_ACCESSエラーをスローします。単純なはずです(私は以前に何度も複雑なデータ構造を扱ってきました)。さまざまな量のアイデアを試しましたが、役に立ちませんでした。他のすべてが機能し、コマンドラインに期待する値を出力します。私はそのコードの盲目、そしていくつかの簡単な担当者が拾うことができると確信しています。

構文が正しいと信じているという理由だけで質問しますが、コンパイル時に問題が発生します。ここにいくつかのサンプルコードがあります:

実装:

for(int i=0;i<fdisVec.size();i++){

    int j;

        if(fdisVec[i] < fdisVec2[i]){

            j = 0;

        }

        else if(fdisVec2[i] < fdisVec[i]){

            j = 1;

        }

    clusters[j].push_back(allMfccs[i]);

}

そして私の.hにはそのように宣言されたオブジェクトがあります(クラスのパブリックメンバー):

    vector< vector <float> > allMfccs;
    vector< vector < vector <float> > > clusters; 

それが役立つ場合、fdisVecとfdisVec2も2Dベクトルですが、「if else」ステートメントは、私が望むように応答します。これと関係があるかどうかは非常に疑わしいです。

4

2 に答える 2

1

cluster.size() == 0(@VaughnCatoによる回答で説明されているように)問題になるという事実にもかかわらず、クラスターの要素にアクセスしてもコンパイル時エラーは発生しませんが、実行時にプログラムがクラッシュする可能性があります。

ただし、コンパイル時のエラーは、をclusters[j]期待しているvector< vector< float > >が、allMfccs[i]はであるという事実が原因vector< float >です。

したがって、clustersとの宣言によればallMfccs、を押す必要がありますallMfccs

于 2012-04-05T07:53:15.363 に答える
1

fdisVec[i] == fdisVec2[i] の場合はどうなりますか?

この場合、j は初期化されないまま (ガベージ) になり、値がクラスター ベクトルの有効なインデックスではない場合があります。

于 2012-04-04T13:46:36.547 に答える