Freigeben über


C6242

Warnung C6242: Ein Aussprung aus diesem Try-Block erzwingt eine lokale Entladungund hat schwere Leistungseinbußen zur Folge.

Diese Warnung gibt an, dass der geschützte Block einer try-finally-Anweisung nicht vollständig durchlaufen wurde, weil der Block vorher durch eine Sprunganweisung verlassen wurde.

Wenn der geschützte Block einer try-finally-Anweisung nicht vollständig bis zur letzten Anweisung durchlaufen wird, muss eine lokale Entladung erfolgen.Für die lokale Entladung sind normalerweise ca. 1.000 Maschinenanweisungen erforderlich, d. h., eine lokale Entladung wirkt sich leistungsmindernd aus.

Verwenden Sie _leave, um den geschützten Block einer try-finally-Anweisung zu verlassen.

Beispiel

Der folgende Code generiert diese Warnung:

#include <malloc.h>
void DoSomething(char *p); // function can throw exception

int f( )
{
   char *ptr = 0;
   __try 
   {
      ptr = (char*) malloc(10);
      if ( !ptr ) 
      {
         return 0;   //Warning: 6242
      }
      DoSomething( ptr );
   }
   __finally 
   {
      free( ptr );
   }
   return 1;
}

Um die Warnung zu korrigieren, verwenden Sie __leave, wie im folgenden Code dargestellt:

#include <malloc.h>
void DoSomething(char *p); 
int f()
{
   char *ptr = 0;
   int retVal = 0;

   __try 
   {
      ptr = (char *) malloc(10);
      if ( !ptr )
      {
         retVal = 0;
         __leave;   //No warning
      }
      DoSomething( ptr );
      retVal = 1;
   }
   __finally
   {
      free( ptr );
   }

   return retVal;
}

Siehe auch

Referenz

TRY--abschließendanweisung