• ベストアンサー

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

  • C言語でのaccess violationについて

    Microsoft Visual C++でプログラムを行っていたのですが、プログラムを実行すると、エラーが発生します。 そこでデバッグを行ったら、 ハンドルされていない例外は”アプリ名.exe”にあります :0xC0000005:Access Violation。 というメッセージが出てきました。 ネットでAccess Violationについて調べたのですが、いまひとつ理解できません。 これはどういうことなのでしょうか?また、解決策をご教授願えないでしょうか? 初心者なので、可能な限り専門用語などを使わない、わかりやすい解説をしていただけると幸いです。お願いします。

  • LinuxでC++ファイルをコンパイルできない

    今までWindowsのPCで研究用プログラムを書いていたのですが、 多数のプログラムを同時に動かせるLinuxの大型サーバーが導入されたので、 これを活用したいと考えています。 これまでコンパイラはBorland C++ Compiler5.5を使っていたのですが、 WinSCPとPuTTYを使ってソースコードをサーバーにコピーしてg++でコンパイルすると、 大量のエラーが出てしまいました。 QR分解などを用いて複素数の計算・推定をして統計結果を表示するプログラムなのですが、 複素数の変数を定義する部分でのエラーが多数を占めているようです。 Borland用に書いたプログラムをLinuxで動かすにはどうすればいいのでしょうか?

  • Access violationの対処方法について

    2015年に入ってから「BIGFISH GANE」と言うサイトにてダウンロード済のゲームが開始できなくなりました。エラーメッセージは「Access violation at 0x02D3092E(tried to write 0x00000000,program terminated.」と表示されます。 サイトのサポート担当からは「Access Violation とは総称的なエラーでいくつかの原因が考えられます。お使いの PC が特定のゲームとの互換性がなく、ゲームが正常に実行されていない、また他に実行されているプログラム(特にセキュリティプログラム)がゲームのプレイに支障をきたしているの2つのことが考えられます。特にゲーム起動時にこのエラーが表示される場合は、後者が原因であることが多いです。」という回答が戻ってますが、どのように対処すべきかがよく分からない状態です。 対象方法がお分かりでしたら、ご教示願います。 ※OKWaveより補足:「J:COMのサービス」についての質問です。

  • Error:Access violation ~困っています

    VAIOの VGC-H72B7(WinXP)を使用しています 回線は eo光ホームタイプ です 先日まで普通にプレイできていたゲーム(ハンゲームのガンバウンド)が急にできなくなりました。 ゲームをスタートしようとすると Error: Access violation at 0x01B059C1(tried to write to 0x00040FFC).program terminated というエラーが出ます エラーが出るようになった日の前日にゲームのアップデートがありましたが 同時に使っているもう一台のPCのほうは問題なくプレイする事が出来ます 解決方法がわからず困っています どうぞよろしくおねがいします

  • C言語で複素数の計算を行いたいと思っております。

    C言語で複素数の計算を行いたいと思っております。 プログラミングソフトは、C言語を始めよう!を用いています。 しかし変数定義の仕方が分かりません。 複素計算とは具体的に、 exp( i π) (i は虚数単位)です 最初に#include<complex.h>を行いましたが 変数の定義の方法、exp( i π)の定義の方法が いまひとつわからない状態です。 保存するときに、Cファイルではなく、 拡張子をcppに変更してCPPファイルでコンパイルを行っています。 exp( i π)を計算可能なプログラムを 教えて頂ければ幸いです。 ご面倒かと思いますが 回答お願いします。

  • C言語(c++)の構造体

    プログラミング(c++)の本に書いてあった問題の答えが分かりません。 課題 実部(実数)と虚数(実数)をメンバとして持つ複素数型(構造体)を定義し、複素数の四則演算を行う関数をそれぞれ定義してその動作を確認せよ どなたか答えを教えてください 本に書いてあるのでプログラミングの基本はわかるのですが自分で組むとコンパイルに失敗します 「構造体とポインタ」という章の問題なのでそれを踏まえてお願いします

  • C++ Compilerについて

    私は、MicrosoftのVisualC++でコンパイルしてるんですけど、コンパイルして実行しようとしたら以下のようなメッセージが表示されました。何が問題なんでしょうか? すごく初歩的な質問とは思いますが、困っているので教えてください。 -------------------Configuration: project2 - Win32 DebugLinking... LINK : fatal error LNK1201: error writing to program database "A:\Debug\project2.pdb"; check for insufficient disk space Error executing link.exe. project2.exe - 1 error(s), 0 warning(s)

  • PHPの関数定義ついて。

    PHPの関数定義ついて。 初歩的な質問かもしれませんが、 define関数での定数定義が、スクリプト実行時に評価されるのはなぜでしょうか。 なぜコンパイル時ではなくスクリプト実行時に評価しなければならないのでしょうか。 また、const文によるクラス定義が、コンパイル時に評価されるのはなぜでしょうか。 なぜクラス定義はコンパイルに評価しても問題ないのでしょうか。

    • ベストアンサー
    • PHP
  • 実行時エラーについて

    お世話になっています。教えて下さい。 VBで作ったプログラムです。 デバッグ時には何の問題もなく、実行可能(完全コンパイル後に実行)で、コンパイルも問題なく通りますが、EXEにして実行すると、以下のエラーが出ます。 実行時エラー:'91' object変数、またはwithブロック変数が設定されていません。 どなたか、原因に心当たりがある方、いらっしゃったら教えて下さい。 よろしくお願いします。

  • Pro*Cで動的SQLを実現する為のライブラリ関数はどのファイルに入っているのでしょうか?

    こんにちわ。 UNIXのC++でPro*Cを使って動的SQLを使ったプログラムを作っています。 プログラムコードは出来上がっていて、単独コンパイルは通るのですが、 実行形式のプログラムを作る時のリンクで「未定義のシンボル」として 以下の4ライブラリ関数がエラーになります。 sqlald()関数、sqlprc()関数、sqlnul()関数、sqlclu()関数 これはおそらく、リンクする際にこれらの関数が含まれているライブラリを リンクできていないだけなのではないかと思っているのですが、 肝心のライブラリがどこのどれなのかがわかりません。 どなたかご存知の方がいらっしゃいましたら、教えてください。 もしかして、プログラム中でもこれらの関数をextern する以外に 何か必要なのでしょうか?