我正在使用MS Visual Studio。我一直在收到这个错误:
“运行时检查失败#3 - 正在使用变量'test'而未进行初始化。”
我不知道如何解决这个问题。这是我目前正在尝试修改的代码:
STDMETHODIMP CButtonDemoBHO::Exec(const GUID*, DWORD nCmdID, DWORD d, VARIANTARG*, VARIANTARG* pvaOut)
{
CRebarHandler *test;
switch (nCmdID){
case BUTTON_PRESSED:
MessageBox(m_hWnd, L"You have pressed the button", L"Button Pressed", MB_OK);
test->findButton(m_hWnd);
test->setmenu();
break;
case MENU_ITEM_SELECT:
MessageBox(m_hWnd, L"You have simulated a button press with the menu ", L"Menu Pressed", MB_OK);
break;
}
return S_OK;
}
答案 0 :(得分:2)
CRebarHandler *test;
switch (nCmdID){
case BUTTON_PRESSED:
MessageBox(m_hWnd, L"You have pressed the button", L"Button Pressed", MB_OK);
test->findButton(m_hWnd); // <= using test without initialization
test->setmenu();
// ...
在最后两行中,您使用的是未初始化的test
指针。由于它没有被初始化,它可能只指向内存中的任何位置,并且它意外指向的块将被解释为CRebarHandler
对象。这是最好的未定义行为,可以 任何 。很高兴它立即爆炸。
我不知道CRebarHandler
是什么,但你不能用一个作为自动对象吗?类似的东西:
CRebarHandler test( /`...whatever it takes...*/ ); // no pointer
switch (nCmdID){
case BUTTON_PRESSED:
MessageBox(m_hWnd, L"You have pressed the button", L"Button Pressed", MB_OK);
test.findButton(m_hWnd);
test.setmenu();
// ...
答案 1 :(得分:1)
您宣布测试,但从未为其分配任何内容。你有一个指向什么的指针。那东西可能是NULL或任何东西。用它来调用指针是不安全的。