1

2D ベクトルを使用して大量のベクトルをブロックに分割しようとしています。

問題は、プログラムを実行すると、セグメンテーション違反: 11 エラーが発生することです。コードは次のとおりです。

vector< vector<double> > Audio::something(vector<double>& theData, int N, int M)
{
int n = theData.size();
int maxblockstart = n - N;
int lastblockstart = maxblockstart - (maxblockstart % M);

int numblocks = (lastblockstart)/M + 1;
vector< vector<double> > subBlock;
this->width = N;
this->height = numblocks;

for(int i=0; (i < numblocks); i++)
{
    for(int j=0; (j < N); j++)
    {   
        subBlock[i][j] = theData[i*N+j];
    } 
}

return subBlock;
}

私が考えていたのは、(theData[i*N+j]) の結果を格納する一時ベクトルを実装してから、2D ベクトル内に押し戻すことですが、それは機能しません..何かアイデアはありますか? ありがとうございました :)

PSメソッド名「something」は無視してください。これは、テスト目的で名前を付けただけです。この問題を解決したら、これを変更します。

4

2 に答える 2

3

push_backベクトルにデータを挿入するにはメソッドを使用する必要があります

for(int i=0; (i < numblocks); i++)
{
    subBlock.push_back(vector<double>());
    for(int j=0; (j < N); j++)
    {   
        subBlock[i].push_back(theData[i*N+j]);
    } 
}
于 2012-09-28T10:44:54.943 に答える
3

これは 1 つの問題です。

subBlock[i][j] = theData[i*N+j];

デフォルトで構築さsubBlockれたため、エントリは含まれません。それらを使用する前に、要素を に追加する必要がありsubBlockます。次のコンストラクターを使用して、double を持つ各numblocksカウントでベクトルを構築できます。vector<double>Nstd::vector::vector()

vector<vector<double> > subBlock(numblocks, vector<double>(N));

forループはそのまま残ります。

于 2012-09-28T10:45:07.377 に答える