C ++で記述されたコードがあり、ラップトップでコンパイルすると結果が表示されますが、コードをコンパイルしてRPIで実行しようとすると、エラーが発生します。
セグメンテーション違反
プログラムの仕組み(現在):
- (.wav)ファイルをdoubleのベクトル( "rawData")に読み込みます
- rawDataをブロックに分割します(ブロックされます)
データをブロックに分割しようとすると、セグメンテーション違反が発生します。サイズ:
rawData-57884ブロック-112800
これで、RPIの容量が256MBしかないことがわかりました。これが問題である可能性があります。または、データを適切に処理していません。物事がどのように実行されているかを示すために、いくつかのコードも含めました。
(main.cpp):
int main()
{
int N = 600;
int M = 200;
float sumthresh = 0.035;
float zerocorssthres = 0.060;
Wav sampleWave;
if(!sampleWave.readAudio("repositry/example.wav", DOUBLE))
{
cout << "Cannot open the file BOOM";
}
// Return the data
vector<double> rawData = sampleWave.returnRaw();
// THIS segments (typedef vector<double> iniMatrix;)
vector<iniMatrix> blockked = sampleWave.something(rawData, N, M);
cout << rawData.size();
return EXIT_SUCCESS;
}
(機能:何か)
int n = theData.size();
int maxblockstart = n - N;
int lastblockstart = maxblockstart - (maxblockstart % M);
int numblocks = (lastblockstart)/M + 1;
vector< vector<double> > subBlock;
vector<double> temp;
this->width = N;
this->height = numblocks;
subBlock.resize(600*187);
for(int i=0; (i < 600); i++)
{
subBlock.push_back(vector<double>());
for(int j=0; (j < 187); j++)
{
subBlock[i].push_back(theData[i*N+j]);
}
}
return subBlock;
任意の提案をいただければ幸いです:)!うまくいけば、これは十分な説明です。