问题描述
void MainMenu::cb_userinput(fltk::Input *in,void *v)
{
MainMenu *mm = (MainMenu*)v;
memset(user_input,'\0',sizeof(user_input));
strcpy((char*)user_input,in->value());
in->value('\0');
memset(user_input,sizeof(user_input));
mm->ExitFromMenu();
}
void MainMenu::ExitFromMenu()
{
Menu->clear();
Menu->end();
}
我正在呼叫回叫的行
input->callback((fltk::Callback*)cb_userinput,this);
回调函数被成功调用,如果我从下面的函数中删除了这两行,则我的程序运行成功,但是如果我同时使用了这两行,则程序会给出分段错误错误,
void MainMenu::ExitFromMenu()
{
//Menu->clear();
//Menu->end();
}
我无法使用gdb,因为此程序正在远程设备上运行,有人可以帮助我找出问题吗?预先感谢。
全班
class MainMenu : public IUserOptions
{
protected:
Group *Menu;
void displayUserOptions();
static char user_input[3];
static void cb_userinput(fltk::Input *in,void *v);
int user_choice;
void ExitFromMenu();
public:
MainMenu(vector<string> userChoices);
int GetUserOption();
~MainMenu();
};
char MainMenu::user_input[3];
MainMenu::MainMenu(vector<string> userChoices) : IUserOptions(userChoices)
{
Menu = new fltk::Group(0,320,220,"");
}
void MainMenu::cb_userinput(fltk::Input *in,void *v)
{
MainMenu *mm = (MainMenu*)v;
memset(user_input,sizeof(user_input));
strcpy((char*)user_input,sizeof(user_input));
mm->ExitFromMenu();
}
void MainMenu::ExitFromMenu()
{
Menu->clear();
Menu->end();
}
void MainMenu::displayUserOptions()
{
Menu->set_vertical();
Menu->begin();
fltk::Widget *Wel = new fltk::Widget(0,"");
Wel->color((fltk::Color)0xf5751000);
Wel->Box(fltk::FLAT_Box);
fltk::Widget *MAIN_MENU_Box = new Widget(0,30,"Genus Power Vers 1.0.0");
MAIN_MENU_Box->Box(FLAT_Box);
MAIN_MENU_Box->color((fltk::Color)0x6E040600);
MAIN_MENU_Box->labelfont(fltk::TIMES_BOLD);
MAIN_MENU_Box->labelsize(20);
MAIN_MENU_Box->labelcolor(WHITE);
// first Menu Option Download Meter
fltk::Button *mb1= new fltk::Button(10,40,200," 1. Download ");//60
mb1->labelfont(fltk::TIMES_BOLD);
mb1->labelsize(16);
mb1->argument(1);
mb1->take_focus();
mb1->color((fltk::Color)0x6E040600);
mb1->align(fltk::ALIGN_CENTER);
mb1->labelcolor(WHITE);
mb1->Box(ROUNDED_Box);
fltk::Input* input = new fltk::Input(400,60,120,25,"key :");
input->labelsize(14);
input->callback((fltk::Callback*)cb_userinput,this);
input->take_focus();
input->argument(2);
input->labelfont(HELVETICA_BOLD_ITALIC);
input->textsize(14);
input->textfont(fltk::COURIER_BOLD);
input->when(fltk::WHEN_ENTER_KEY_CHANGED);
// Second Menu Option to Print
fltk::Button *mb2= new fltk::Button(10,80," 0. Quit ");//60
mb2->labelfont(fltk::TIMES_BOLD);
mb2->labelsize(16);
mb2->color((fltk::Color)0x6E040600);
mb2->align(fltk::ALIGN_CENTER);
mb2->labelcolor(WHITE);
mb2->Box(ROUNDED_Box);
Menu->end();
}
int MainMenu::GetUserOption()
{
cout << endl << "Address of this:" << this << endl;
getchar();
displayUserOptions();
return user_choice;
}
MainMenu::~MainMenu()
{
delete Menu;
}
我的基类是
class IUserOptions
{
protected:
vector<string> UserChoices;
public:
IUserOptions(vector<string> userChoices);
virtual int GetUserOption() = 0;
virtual ~IUserOptions();
};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)