在为 OpenCV 的 C++ createTrackbar 运行 C 包装器时出现编译分段错误(核心转储)
Getting Compilation segmentation fault (core dumped) when running a C wrapper for OpenCV's C++ createTrackbar
这是我的包装createTrackbar。我不确定这是我使用它的方式还是它的书写方式。到目前为止,我将onChange和userdata中的O更改为NULL,我将String*类型更改为const char*。它可以是我将TrackbarCallback*定义为指针的方式。但我不确定还有什么其他的方式来定义它。
int cv_createTrackbar(String* trackbarname,String* winname, int* value,
int count, TrackbarCallback* onChange=0, void* userdata=0)
{
return cv::createTrackbar(*trackbarname, *winname, value,
count, *onChange, userdata);
}
下面是我使用它的一段代码。所有其他的代码运行,但当我添加只是cv_createTrackbar行我得到了错误的帖子标题。我把这行去掉,代码运行得很好。当我声明a和b为const char时,我试着调用new String (a) and (b) as *(&a)
,我也试着调用&a和&b之后。我所有的老技巧似乎都不起作用了,所以如果有人能给我一些建议,我肯定会很感激的。
namedWindow("My Window", 1);
const char* a = "Contrast";
const char* b = "My Window";
int iSliderValue1 = 50;
cv_createTrackbar(new String (a), new String(b), &iSliderValue1, 100);
错误:编译分段错误(核心转储)在3月26日星期三16:35:55
onChange
参数的默认值为0 (NULL)。您没有将onChange
传递给cv_createTrackbar
,因此使用默认值。您尝试在函数*onChange
中解引用它。解引用NULL指针将导致段错误(核心转储)。
createTrackbar
原型为:
int createTrackbar(const string& trackbarname, const string& winname,
int* value, int count, TrackbarCallback onChange=0, void* userdata=0);
并且文档说明:
onChange -指向每次滑动条改变位置时调用的函数的指针。这个函数的原型应该是void Foo(int,void*);,其中第一个参数是跟踪栏位置,第二个参数是用户数据(参见下一个参数)。如果回调指针为NULL,则不调用回调函数,只更新值。
由于onChange
期望一个指针,并且文档特别声明NULL是有效的,您需要将*onChange
更改为onChange
。不需要解引用
另外,将函数参数的TrackbarCallback*
更改为TrackbarCallback
。它不需要是指向指针的指针
- 分段故障(堆芯转储)矢量
- 二叉排序树无法编译
- 运行编译的 a.out 后出现分段错误(核心转储)错误
- 编译时条件包含.分段标头与包括整个实现
- 当我编译我的程序时,它显示"分段错误(或)分段错误(核心转储)
- 分段错误,当使用 cmake 编译而不使用 cout 编译时
- C++代码通过编译,但返回分段错误
- C++ 代码编译时没有错误,但在运行时会出现“分段错误”
- Unix可执行文件上的Mac分段错误,文件编译正常
- 在eclipse中编译arduino时出现链接器分段错误
- NVCC编译后的分段错误
- 未使用调试器标志编译的代码出现分段错误
- 使用 -O3 使用 g++ 编译时C++程序中的分段错误
- 为什么编译顺序在使用 std::map::insert() 时有时会导致分段错误
- 分段错误,没有详细的编译警告
- 在一切正常编译的情况下,如何调试c++中的分段错误
- 指向二维数组的指针,程序编译时抛出分段错误
- C++代码编译,但在运行时出现分段错误。我想我正在篡改链表
- 在为 OpenCV 的 C++ createTrackbar 运行 C 包装器时出现编译分段错误(核心转储)
- 如何修复编译官方样本时不使用bjam的分段错误