- ベストアンサー
C++ で、 "access violation"
作っていたプログラムに、ある関数をいれました。 コンパイルはできたのですが、その関数を定義している行まで実行したら、そこで、"access violation"のエラーがでて、とまります。 その関数は、複素数の計算をしているのですが、複素数として定義した変数をすべて消すとこのエラーはなくなりました。しかし、複素数の計算をする必要があるので、それでは困ります。 また、その関数をただ呼び出すだけの簡単なプログラムを作ったところ、問題なく動きました。 何か考えられる問題はないでしょうか? 初心者なので、かなり初歩的なことかもしれないのですが、自分としてはなぜこうなるのか、分かりません。チェックの仕方なども含めて、アドバイスいただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単純に言えば"メモリ破壊"です。 確保していたサイズ以上のメモリにアクセスしていたり。 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つのケースになっていないか調べるべきかと思います。
その他の回答 (1)
- tatsu99
- ベストアンサー率52% (391/751)
回答No.2
#1のかたが言っているようにメモリ破壊です。エラーの発生するソース、およびエラーメッセージを提示した方が、良い回答が得られると思います。なお、ソースが提示された時、私が必ず回答出来るわけではありませんので、あらかじめご了承下さい。
お礼
早速のお返事ありがとうございます。 その関数を呼び出すだけのプログラムは動くので、指摘していただいた3ケースにはなっていないんじゃないでしょうか? 初心者で、分からないことばかりですみません。