我用SetConsoleCtrlHandler函数注册了一个Console   handler,用来侦听CTRL   +   C 
这个事件,目的是用来在按下CTRL   +   C这个键后退出Console   程序,但是每次在调试时按下CTRL   +   C都会出现上述内存错误,不知为什么。而在运行状态下按CTRL   +   C又不会出现内存错误,但是程序也没有退出,而是死在那里,这是怎么回事呢?

解决方案 »

  1.   


    // MSDN上的源码,比对一下
    #include <windows.h> 
    #include <stdio.h> 
     
    BOOL CtrlHandler( DWORD fdwCtrlType ) 

      switch( fdwCtrlType ) 
      { 
        // Handle the CTRL-C signal. 
        case CTRL_C_EVENT: 
          printf( "Ctrl-C event\n\n" );
          Beep( 750, 300 ); 
          return( TRUE );
     
        // CTRL-CLOSE: confirm that the user wants to exit. 
        case CTRL_CLOSE_EVENT: 
          Beep( 600, 200 ); 
          printf( "Ctrl-Close event\n\n" );
          return( TRUE ); 
     
        // Pass other signals to the next handler. 
        case CTRL_BREAK_EVENT: 
          Beep( 900, 200 ); 
          printf( "Ctrl-Break event\n\n" );
          return FALSE; 
     
        case CTRL_LOGOFF_EVENT: 
          Beep( 1000, 200 ); 
          printf( "Ctrl-Logoff event\n\n" );
          return FALSE; 
     
        case CTRL_SHUTDOWN_EVENT: 
          Beep( 750, 500 ); 
          printf( "Ctrl-Shutdown event\n\n" );
          return FALSE; 
     
        default: 
          return FALSE; 
      } 

     
    void main( void ) 

      if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE ) ) 
      { 
        printf( "\nThe Control Handler is installed.\n" ); 
        printf( "\n -- Now try pressing Ctrl+C or Ctrl+Break, or" ); 
        printf( "\n    try logging off or closing the console...\n" ); 
        printf( "\n(...waiting in a loop for events...)\n\n" ); 
     
        while( 1 ){ } 
      } 
      else 
        printf( "\nERROR: Could not set control handler"); 
    }
      

  2.   

    还是不行,没到BOOL CtrlHandler( DWORD fdwCtrlType ) 这个函数就报错了,MAIN里的是正常执行的