2014-01-28 2 views
0

Google에서이 웹 사이트를 찾았습니다. 여기 사람들이 코딩 문제를 해결한다고 가정합니다.Regex & Invalid null pointer expression

응용 프로그램에 대한 잘못된 단어 필터를 만들지 만 문제가 발생했습니다. 는 현재 내가 응용 프로그램의 진입 점에서 쓰레드를 생성하고, 그리고 스레드의 흐름은 다음과 같이 진행됩니다

while(true) 
{ 

    if (!OpenClipboard(NULL)) 
     ExitProcess(0); //TODO: Try opening clipboard again. 

    h = GetClipboardData(CF_TEXT); //h is HANDLE. 

    std::string CB_Data = (char*)h; 

    if(CB_Data.size() != NULL) //An attempt to check if it's not empty 
    { 
     if (std::regex_search(CB_Data.c_str(), BADWORD_FILTER)) 
     { 
      try 
      { 
       EmptyClipboard(); 
       SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern." 
      } 
      catch(...) 
      { 
       //TODO: Error logging 
      } 
     } 

     else if (std::regex_search(CB_Data.c_str(), BADWORD_FILTER2)) 
     { 
      try 
      { 
       EmptyClipboard(); 
       SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern." 
      } 
      catch(...) 
      { 
       //TODO: Error logging 
      } 
      EmptyClipboard(); 
      SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern." 
     } 
    } 

    CloseClipboard(); 
    Sleep(1000); //Check every 1 second for the forbidden words. 
} 

그래서이 응용 프로그램 모니터는 금지 단어에서 클립 보드. 그러나 대부분의 경우 "Expression : Invalid null pointed"오류가 발생하며 Visual Studio 디버거에 익숙하지 않습니다. 나는 노력했으나 분명히 성공하지 못했습니다. 여기

오류입니다 : http://i.stack.imgur.com/wACnA.png

어떤 도움을 크게 감상 할 수, 감사합니다.

+0

오류는 930 행에 예외가 발생했다는 것을 알려줍니다. 귀하가 올린 스 니펫의 930 행은 무엇입니까? –

+0

930 번 라인은 ../include/xstring입니다. #include 에 포함되어 있습니다. – user2757439

+0

누군가 도움을 주길 바랍니다. – user2757439

답변

0

GetClipboardData()const char* 포인터를 반환하지 않으며 std::string 생성자가 매개 변수를 const char*으로 읽으려고하기 때문에 오류가 발생합니다.

질문에서 진술 한대로 GetClipboardData()HANDLE을 반환합니다. 이 함수를 사용하는 올바른 예제는 this 주제를 참조하십시오.

기타 유용한 팁 :

  • 눌러 "다시 시도"버튼을 디버거에 착륙합니다. 디버거를 사용하면 프로그램이 잘못 된 위치를 정확하게 볼 수 있습니다.
  • CB_Data.size()은 포인터가 아닌 부호없는 정수 값 (문자열의 길이)입니다. NULL과 비교하지 마세요.