也许这是this线程的延续,
程序编译时没有出现错误或警告,但当我运行它时,调用了处理程序函数,我得到了EXEC_BAD_ADDRESS
void MainController::show_color_trackbars(int *h, int *s, int *v){
String winName = "HSV Trackbars";
namedWindow(winName, CV_WINDOW_AUTOSIZE);
std::map<String, void*> user_data_h;
user_data_h["Object"] = this; //this is a MainController object
user_data_h["h"] = h;
createTrackbar("trackbar_H", winName, h, 255, trackbar_handler, &user_data_h);
};
void trackbar_handler(int value, void *user_data){//callback for the track bar
std::map <String, void*> *user_data_map;
user_data_map = reinterpret_cast<std::map<String, void *> *>(user_data);
MainController *controller;
controller = reinterpret_cast<MainController *>((*user_data_map)["Object"]);
int *var;
var = reinterpret_cast<int*> ((*user_data_map)["h"]);
//do something with controller and var
};我在选角的时候弄错了吗?我想不出这段代码失败的另一个原因。
提前感谢
发布于 2010-09-22 15:34:36
这是因为user_data_h很可能是一个局部变量,并且在调用trackbar_handler时已经被销毁。trackbar_handler在一个不再有效的指针上工作!
请检查是否可以动态分配user_data_h并使用回调调度注册该指针。
https://stackoverflow.com/questions/3767147
复制相似问题