は、だから私は、コードのこの部分を持っている:OpenCVで値を入力しようとすると、segフォルトが発生するのはなぜですか?
if(channels == 3)
type = CV_32FC3;
else
type = CV_32FC1;
cv::Mat M(rows,cols,type);
std::cout<<"Cols:"<<cols<<" ColsMat:"<<M.cols<<std::endl;
float * source_data = (float*) M.data;
// copying the data into the corresponding pixel
for (int r = 0; r < rows; r++)
{
float* source_row = source_data + (r * rows * channels);
for (int c = 0; c < cols ; c++)
{
float* source_pixel = source_row + (c * channels);
for (int ch = 0; ch < channels; ch++)
{
std::cout<<"Row:"<<r<<" Col:"<<c<<" Channel:"<<ch<<std::endl;
std::cout<<"Type check: "<<typeid(T_M(0,r,c,ch)).name()<<std::endl;
float* source_value = source_pixel + ch;
*source_value = T_M(0, r, c, ch);
}
}
}
T_Mは固有::テンソル
である私が最初に私がT_Mからエラーを得たと思ったが、それはそうではありません。
* source_valueにアクセスしようとしましたが、そのエラーの原因はほとんど確かです。
面白いことに、私は最後または最初にエラーが発生しないということです。私は中央の周りにセグフォルトを取得します。 たとえば、行:915、列:793、チャネル:1
Row:829 Col:729 Channel:0でエラーが発生します。
このエラーの原因を特定できません。
適切なツールは、あなたのデバッガを使用することですが、お願いしませんあなたがそうする前にスタックオーバーフローで。 1つ目の行でコードを検査するときに行ったすべての観察を教えてください。また、[**小さなプログラムをデバッグする方法(Eric Lippertによる)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)**]を読んでみてください。あなたの問題を再現する** [MCVE] **を私たちに任せてください。 (これはπάνταῥεῖ™によって提供される個人的なコメントです) –
私は一般に同意します。その場合、代わりに 'electricfence'の仕事があります。もしあなたがLinuxを使っていればうまくいきます。 –
私はあなたに同意します。しかし、私はよく知られていないビルドツール(bazel)で慣れていません。だから私はバゼルに協力してもらうよう説得しようとしている間にこれを尋ねると思った。 –