質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

42941閲覧

ビルドはできるけどデバッグができない

culuculu

総合スコア52

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2016/11/03 10:56

編集2016/11/05 06:20

現在、Visual Studioで1つのプロジェクトを作り、ソースファイル(C++)にプログラムを書いてデバッグを行おうとしています。
ビルドはできたのですが、デバッグができません。
デバッグ開始をしてみると警告みたいなものが出てきて、「初回例外が0x032FBFCA(opencv_core310.dll)で発生しました(プロジェクト名.exe 内):0xC0000005:場所0x00000011の読み取り中にアクセス違反が発生しました。
この例外のハンドラーがある場合は、プログラムを安全に続行できます。」
と表示されます。
デバッグなしで開始をするとプロジェクト名.exeは動作を停止しました。
と表示されます。

このエラーの原因はopencv_core310.dllかプロジェクト名.exeだと考えていますが、ライブラリのパス指定もうまくできているのでおそらくプロジェクト名.exeだと思っていますが何がいけないのかわかりません。

心当たりのある方はご教授願います。


OS:Windows
IDE:Visual Studio 2013 Professional
ライブラリ:opencv3.1.0


気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

「0xC0000005:場所0x00000011の読み取り中にアクセス違反が発生しました。」はメモリの不正アクセスです。
デバッガで例外が表示された時に「中断」を選択し、「呼び出し履歴」タブを開くとその例外が発生するまでのスタックの状態が表示されます。サブルーチン呼び出し後の戻り先がここに新しい物から順に表示されています。
これを見て、TetsuroMuraseさんのプログラムまで辿れる筈です。
そこに至るまでのTetsuroMuraseさんのプログラムに何か問題がある可能性が高いです。

投稿2016/11/03 13:39

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

culuculu

2016/11/04 04:05

簡単なプログラム(cv::namedWindowやcv::imshow、cv::waitKeyなどの関数のみ)に書き換えた後、うまく実行までできました。 やはり、プログラムに問題がありそうです。 ありがとうございます。
culuculu

2016/11/04 05:26

プログラムを書き換えたところ、デバッグしようとしたら前回とは少し違い、「ハンドルされない例外が0x00153599(プロジェクト名.exe)で「発生しました:0xC00000FD:Stack overflow(パラメーター:0x00000001,0x00C82F74)。」とでました。 これは前回のライブラリがエラー内容でもなさそうですし、プログラムでもないと思っているのですが...わかりません。
Chironian

2016/11/04 05:53

スタックオーバーフローの場合、呼び出し履歴が長くなるのでこちらは使えない場合が多いです。 スタックオーバーフローの原因は多数ありますが、良くあるものが2つあります。 ・巨大な配列をローカル変数として確保した ・再帰呼び出し時のreturn判定ミスです。 思い当たることはないですか? 特に画像を扱っている場合、ついローカル変数で巨大配列を定義することがあるので、前者は怪しいと思います。 OpenCVのようにメジャーなライブラリの場合、それを使っている人が多数いるため、簡単に見つかるような不具合は修正されていることがほとんどです。(99.99%くらい?) それに対して、自分が開発中のソフトウェアにそれは全く期待できません。 なので、経験的にも、デバッグ中のプログラム(ライブラリの使い方を理解できていないこと含む)を疑った方がスムーズに進みますよ。
culuculu

2016/11/04 06:08 編集

確かに画像を使っていてい変数はローカルで指定しています。 cv::imread(".png")でローカル変数として入れているのですがまずいでしょうか? これがローカル変数で巨大配列を定義することになるのでしょうか? 先ほど、その画像をimread関数で読み込んでいる変数をmain関数の外に出したのですが結果は変わりませんでした
culuculu

2016/11/04 06:14

プロジェクト プロパティページ にある 「構成プロパティ」→「リンカー」→「システム」の「スタックサイズの設定」でサイズを大きくしてみたのですが(100MB)結果は変わりませんでした。
Chironian

2016/11/04 06:34

OpenCVの画像はスタックではなくヒープに確保されますのでスタックオーバーフローとは無関係です。 例えば、DWORD temp[1024][768][3];のような確保はしてないでしょうか? しかし、スタックを100Mに増やしてもだめなら、更に巨大なメモリを確保していることになるので、こちらではないかも知れません。その場合は再帰定義ミスの可能性も疑うべきです。 問題が再現する最小限のソース(50行~100行程度)を作って提示された方が早いかも知れません。 その場合は、質問欄の上の方にある<code>を押してでてくる、'''の間にソースを貼り付けるようにご注意下さい。(でないとインデントが反映されないので読めなくなります。)
culuculu

2016/11/04 07:03

最初の質問欄にプログラムを追加しました。 見てください。
Chironian

2016/11/04 07:25 編集

VideoPicture()関数の中で何の条件もなくVideoPicture()を呼んでいるので無限にVideoPicture()がcallされます。1回呼ばれる度にスタックを使うので、結構短い時間でスタックオーバーフローに至る筈です。
culuculu

2016/11/05 06:15

VideoPicture()関数の中のコードをコメントアウトするとエラーが出なくなりました。 プログラムのせいで実行ファイルが動かなくなることに気づけませんでした。
culuculu

2016/11/05 06:15

ありがとうございます。
guest

0

ベストアンサー

"opencv_core310.dll"はRelease"モード用です。Debugの際は"opencv_core310d.dll"をリンカーの入力に指定しましょう。

投稿2016/11/03 10:59

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

culuculu

2016/11/03 11:08 編集

リンカー入力に継承の値としてopencv_core310d.libとopencv_core310.libが共に設定されていますがRelease用の値は消した方がいいでしょうか? 先ほど,Releaseでビルドしようとしたところ、エラーが多く出てしまいました。 これとエラーに関連があるのでしょうか? Releaseモード用のライブラリに問題があるとエラーで言われてる感じがするので...
MasahikoHirata

2016/11/03 11:05

プロジェクトのプロパティーで"Debug"と"Release"の切り分けが出来ると思います。また現象を見るとDebugなのにエラーはRelease用のDLLでしたので。 Debugの方のプロパティーに”opencv_core310.dll”が記載されているのであればそれを削除して再ビルドしてみてください。
MasahikoHirata

2016/11/03 11:15

”先ほど,Releaseでビルドしようとしたところ、エラーが多く出てしまいました。 これとエラーに関連があるのでしょうか?” 恐らくプロジェクトのプロパティーの設定に問題が。
MasahikoHirata

2016/11/03 13:24

まずは、簡単なプログラム、例えば”cv::Mat src = imread("画像ファイル"); imshow("Temp",src); waitKey(0); ”位のものを試しに作成してデバッグから。
culuculu

2016/11/04 04:04 編集

cv::namedWindowやcv::imshow、cv::waitKeyなどの関数をプログラムに入れてビルドしてデバッグできました。 やはり、プロパティの設定か自身の今作っているプログラムに問題があるのかもしれません。 ありがとうございます。
MasahikoHirata

2016/11/04 05:24

debugが出来るようになったら、適当な所にブレークポイントを仕掛けてF10でステップトレースして、エラーが発生する場所を特定する事をお勧めします。
culuculu

2016/11/04 05:26

プログラムを書き換えたところ、デバッグしようとしたら前回とは少し違い、「ハンドルされない例外が0x00153599(プロジェクト名.exe)で「発生しました:0xC00000FD:Stack overflow(パラメーター:0x00000001,0x00C82F74)。」とでました。 これは前回のライブラリがエラー内容でもなさそうですし、プログラムでもないと思っているのですが...わかりません。
MasahikoHirata

2016/11/04 05:29

エラーがスタック オーバーフローですから、サブルーチンコールが無限ループに入ったのでは?
MasahikoHirata

2016/11/04 05:29

先ほども記載しましたが、怪しいと思われる処理の直前位にブレークポイントで細かく確認。
culuculu

2016/11/05 06:19

なんとかエラーは消すことができました。 Visual Studioでブレークポイントを指定したことがなかったのでよくわかっていませんでした。 今後は、新しく追加した関数等にブレークポイントを追加したいと思います。 新しい知識を提供してくださり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問