スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟]©2ch.net
Pythonで以下の記述があり、C++に書き直したいです。
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
以下のC++から書き直すとどうなりますか?
#include "opencv2/opencv.hpp"
cv::VideoCapture _vidIn{}; strlen()が数え間違えるので、自前でchar*単位で回して数えた。解決。
後になって、それはどう考えてもおかしいだろとコメントアウトしていたstrlen()を戻したら、ちゃんと正常動作していた。
実は今、ブレークポイントを設定していない箇所・・・しかも特定の位置で実行停止すると言う(私は)経験のない事例に困惑しきりで、どこかmalloc()失敗していてメモリ喰い破っているのかな・・・と見直しているのですが、見付からず。
一般論として、ポインタ周りが怪しい、ですよねえ・・・。
それ以外の可能性として、どんな事があるでしょうか。
環境はMicrosoft Visual Studio Community 2022のC++ですが、C言語&DXライブラリで書いています。 エラーがでてるのか?表示してくれてると思うが内容はどうなっているのか? >>406
エラーや警告は一切ありませんでした。
と言うか解決した今だから言えますが、私が馬鹿でした。
ええと、構造体ポインタに構造体の実体を代入していました。 そらヒープエリアも突き破るってもんで。
こんな感じ。
struct AAA data[2];
struct AAA *aaa; // *ではなく**
aaa=(struct AAA*)malloc( sizeof(struct AAA*) *2):
aaa[0]=data[0]; // &data[...
aaa[1]=data[1]; // &data[...
プログラムは、(間違った)意図通りにちゃんと動いていたみたいです(笑)。 clangは、--targetオプションでターゲットを変更できますが
ひょんなことから、どうも、このオプションを無指定の時の
デフォルト値が、システムにインストールされているmsvcの
バージンによって変化するようなのですが、詳しい方
いらっしゃいませんか。たとえばそれにより、
char16_tがbuilt-in typeになるかどうかに違いが出てきます。
VS2019をインストールしていないとき、clang10やclang16(?)
は、デフォルトでは、char16_tがbuilt-in typeではありません。
このとき、出力された*.llの冒頭に灰化の記述があります:
target triple = "i686-pc-windows-msvc14.0.50727"
ところが、
-fms-compatibility
-fms-compatibility-version=19
を指定すると、char16_tがbuilt-in typeになり、
*.ll の冒頭の記述が変化し、
target triple = "i686-pc-windows-msvc19.0.0"
となります。上記のオプションの代わりにコマンドラインに
--target=i686-pc-windows-msvc19.0.0
と指定してもchar16_tに関してはbuilt-in type になりました。
ここまではいいのですが、不思議なことに、これらのオプションを
全く指定しなくても、なぜか、char16_t が built-in typeになって
いたことがありました。そのときは、インストールした時点で
VS2019がインストールされていたと思います。
今はインストールされていません。