C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 50 を表示中)
■27529 / )  アプリケーションエラー
□投稿者/ C++見習い (1回)-(2008/11/09(Sun) 02:38:49)

分類:[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;
}


返信 編集キー/


管理者用

- Child Tree -