私はwin32スレッドを使ってアプリケーションを並列化する必要があります。コードの一部の1つは、スレッドを使用して静的配列を変更することです。静的配列によるアクセス違反?
私はこのようなパラメータとして配列を渡す:
struct threadParameter {
float **array;
int row;
}
例のコードは次のようになります:
// Main
float data[100][100]
for (int i = 0; i < 100; i ++) {
tp = (*threadParameter) new threadParameter;
tp->array = (float **) data;
tp->row = i;
AfxBeginThread... // Begin thread code
}
// Thread Code
UINT myThread(LPVOID param) {
threadParameter *pp = (threadParameter *) param;
for (int j = 0; j < 100; j ++) {
pp->array[pp->row][j] = NEWVALUE;
}
}
プロジェクトを実行するときしかし、私は、「アクセス違反エラーを取得します"私は**配列ポインタを介して配列をacceessしようとすると。配列データが 動的な場合、この問題は発生しません。この問題を解決する方法はありますか(アレイデータを静的から動的に変更することはできません)
サイドノート:MFC –
を使用していない場合は、AfxBeginThreadではなく_beginthreadex()を使用する必要があります.Mehrdadが説明しているように、 'float ** array'を 'float * array'に置き換えてインデックスを手動で計算してください。 –