Как устранить ошибку «Ошибка проверки времени выполнения № 3»? - PullRequest
0 голосов
/ 30 мая 2010

Я работаю в 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;
}

Ответы [ 2 ]

2 голосов
/ 30 мая 2010
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 голос
/ 30 мая 2010

Вы объявили тест, но никогда не назначали ему ничего. У вас есть указатель на ничто. Эта вещь может быть NULL или что-то еще. Использование его для вызова указателя небезопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...