• ベストアンサー

C++ で、 "access violation"

作っていたプログラムに、ある関数をいれました。 コンパイルはできたのですが、その関数を定義している行まで実行したら、そこで、"access violation"のエラーがでて、とまります。 その関数は、複素数の計算をしているのですが、複素数として定義した変数をすべて消すとこのエラーはなくなりました。しかし、複素数の計算をする必要があるので、それでは困ります。 また、その関数をただ呼び出すだけの簡単なプログラムを作ったところ、問題なく動きました。 何か考えられる問題はないでしょうか? 初心者なので、かなり初歩的なことかもしれないのですが、自分としてはなぜこうなるのか、分かりません。チェックの仕方なども含めて、アドバイスいただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

単純に言えば"メモリ破壊"です。 確保していたサイズ以上のメモリにアクセスしていたり。 char *p = (char*)malloc(5); p[5] = 0; // ×NG NULLにアクセスしていたり。 char *p = NULL; p[0] = 0; // ×NG メモリ解放しているのにアクセスしていたり。 char *p = (char*)malloc(5); free(p); p[0] = 0; // ×NG 他にもありそうですけど、とりあえず上3つのケースになっていないか調べるべきかと思います。

march0928
質問者

お礼

早速のお返事ありがとうございます。 その関数を呼び出すだけのプログラムは動くので、指摘していただいた3ケースにはなっていないんじゃないでしょうか? 初心者で、分からないことばかりですみません。

その他の回答 (1)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

#1のかたが言っているようにメモリ破壊です。エラーの発生するソース、およびエラーメッセージを提示した方が、良い回答が得られると思います。なお、ソースが提示された時、私が必ず回答出来るわけではありませんので、あらかじめご了承下さい。

関連するQ&A