- ベストアンサー
C言語の配列についてエラーが発生する理由について
- C言語の配列に関連するプログラムでエラーが発生しています。具体的には、特定の条件でアクセス違反が発生しています。
- プログラムの実行中に、2tika06.exe の例外が発生しました。エラーコードは 0xC0000005 です。
- エラー原因として考えられるのは、配列のアクセスが有効範囲外になっている可能性や、ポインタの不正な利用によるものです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
となると ・short型の数値を、「アドレス」として doubleへのポインタ aに代入してしまっている。 その「アドレス」がアクセス不能な領域を示していて、 *a でアクセスしようとしてエラーになる。 というのが一番可能性が高そうです。 ただ、解決策となると、何を意図してこんな書き方しているか、がわからないから答えようがありません。 プログラム全体を示してください。 この3行が「連続する3行」だとしたら、それ自体が変ですし。
その他の回答 (4)
- D-Matsu
- ベストアンサー率45% (1080/2394)
エラーが出るところでdst_img->width * dst_imt->heightとdst_img->width * jj + iiの値を比較してみましょう。エラーそのものはその辺でしょうから。 ただ、既に指摘されてるようにC++は型チェックが厳密になったので最低でも警告は出てるはずなんですが…… 本当に何も出ていないなら、コンパイルオプションで警告抑制をしている可能性があります。
お礼
警告がでていました。 エラーの原因はポインタの使い方にありました。 初歩的なミスです。 これからは警告にも注意を払います。 回答ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
そもそも C じゃないよね, これ. で C++ なら #1 で言われているようにそもそもエラーになるんじゃないかな.
お礼
すみません、C++です。間違えました。 なぜかエラーはでず、コンパイルできてしまいました。 只今実装できる環境がないので、また月曜日になおしてみようと思います。 回答ありがとうございます。
- asuncion
- ベストアンサー率33% (2127/6289)
その部分でエラーが起きているという根拠は? それから、部分的なコードを見せられても困ります。 全体を見せてください。
お礼
デバックしてみてエラー文が発生したのが上記の2行目の箇所だったのではらせて頂きました。 また、その行をつけ加えるまではエラー文は発生しなかったもので…。 とりあえず下記で指摘頂いた点をなおしてみます。 それでわからなかったらもう一度全体を貼り付けたいと思います。 ありがとうございました。
- kmee
- ベストアンサー率55% (1857/3366)
> double *a = dst_buf[dst_img->width * jj + ii]; これ、コンパイルエラー出ませんでしたか? doubleのポインタである a と short型の dst_buf[dst_img->width * jj + ii] とでは型がまったく違うのですが。
お礼
訂正ですがC++です。 VC++でコンパイルしましたがコンパイルエラーはなく通ってしまいました。 型が悪かったんですね。 勉強してもう一度組んでみます。 ありがとうございます。
お礼
2回もありがとうございます。 ご指摘いただいて気づいたのですが、ポインタの使い方を根本的に間違えていました。 これから質問するときはプログラム全体を示したいと思います。 ありがとうございました。