|
分類:[C/C++]
2008/11/09(Sun) 04:09:42 編集(投稿者) 2008/11/09(Sun) 04:09:37 編集(投稿者)
アプリケーションエラーについての質問です。 言語:Microsoft Visual C++,環境:Windows XP Professional
関数SimAnnで最大値を得る関数Get_eachMaxをfor文で複数回呼び出し, すべての最大値を求めるプログラムを作成しています。 コンパイルすると通るのですが,実行すると
アプリケーションエラー "0x7c950f29"の命令が"0x00000069"のメモリを参照しました。メモリが"read"になることはできませんでした。 "0x7c950f29"の命令が"0x0000006e"のメモリを参照しました。メモリが"read"になることはできませんでした。
というエラーが出て止まってしまいます。デバッグしてみると,
HEAP[SA.exe]: Heap block at 0037F188 modified at 0037F1F4 past requested size of 64 SA.exe の 0x7c941230 でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。
という出力とともにmalloc.cが開かれます。メモリに関するエラーだということは分かるのですが, 原因がつかめずに困っています。どなたか原因がわかる方がいればご教授願います。
以下に,その一部を抜粋したものを掲載します。
※すべての関数は同じクラスのメンバ関数,length = int SimAnn() { for(i = 0; i < 100; i++) { Get_eachMax(); } }
Get_eachMax() { int wmax = 0; for(int i = 0; i < N; ++i) { int w = 0; int tempw = calcMaxWidth(temp_new_sm[i], w); if(wmax < tempw) { wmax = tempw; } } int hmax = 0; for(int i = 0; i < N; ++i) { int x = 0; int temph = calcMaxHeight(temp_new_sm[i], x); if(hmax < temph) { hmax = temph; } } }
calcMaxWidth(int mod, length &w) { for(int k = 0; k < N; ++k) { if(temp_new_data[k].name == mod) { w += temp_new_data[k].x_width; break; } } vector<length> l; l.resize(N+1); int j = 0; for(vector<int>::iterator i = O[mod][MAA].begin(); i != O[mod][MAA].end(); ++i, ++j) { length tempw = w; l[j] = calcMaxWidth(*i, tempw); } if(j == 0) { return w; } return getMaxL(l); }
calcMaxHeight(int mod, length &x) { for(int k = 0; k < N; ++k) { if(temp_new_data[k].name == mod) { x += temp_new_data[k].y_width; break; } } vector<length> h; h.resize(N+1); int j = 0; for(vector<int>::iterator i = O[mod][MBA].begin(); i != O[mod][MBA].end(); ++i, ++j) { length temph = x; h[j] = calcMaxHeight(*i, temph); } if(j == 0) { return x; } return getMaxL(h); }
getMaxL(vector<length> l) { length maxl = 0; for(vector<length>::iterator i = l.begin(); i != l.end(); ++i) { if(maxl < *i) { maxl = *i; } } return maxl; }
|