Sdílet prostřednictvím


Zkoumání ASSERT příkazy

Předpokládejme, že při spuštění ladicí verzi aplikace MFC, neexistují žádné problémy.Však verzi stejné aplikace dojde k chybě, vrátí nesprávné výsledky nebo jiné neobvyklé chování projevuje.

Tento problém může být způsoben při umístění důležité kód příkazu ASSERT ověřit, že provede správně.Protože jsou příkazy ASSERT nepracovala ve verzi sestavení aplikace MFC, verze sestavení nelze spustit kód.

Používáte-li potvrdit, že úspěšně volání funkce ASSERT, zvažte použití OVĚŘIT místo.Makro ověřit vyhodnotí argumenty v obou ladění a vytvoří verzi aplikace.

Jiné upřednostňované technika je vrácená hodnota funkce přiřadit dočasnou proměnnou a poté otestovat proměnné příkazu ASSERT.

Zkontrolujte následující fragment kódu:

enum {
    sizeOfBuffer = 20
};
char *buf;
ASSERT(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Tento kód spouští dokonale v ladicí verzi aplikace MFC.Pokud volání calloc( ) se zobrazí diagnostickou zprávu, která obsahuje soubor a řádek číslo, dojde k chybě.V prodejní sestavení aplikace MFC:

  • volání calloc( ) nikdy nedošlo, opuštění buf inicializovat, nebo

  • strcpy_s( )kopie "Hello, World" do náhodné část paměti, případně selhání aplikace nebo příčinou systém přestane reagovat, nebo

  • free()systém se pokusí uvolnit paměť, která nebyla nikdy přidělena.

ASSERT správně používat, by měl být změněn v následující ukázka kódu:

enum {
    sizeOfBuffer = 20
};
char *buf;
buf = (char *) calloc(sizeOfBuffer, sizeof(char) );
ASSERT( buf != NULL );
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Nebo můžete použít ověření:

enum {
    sizeOfBuffer = 20
};
char *buf;
VERIFY(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Viz také

Referenční dokumentace

Řešení problémů verze sestavení