С/С++. "Little thing" for debuging - assert

Небольшая полезная фича работающая только при дебаге (для самоконтроля от ошибок).
 
- если использовать стандартную библиотеку
 
#include <assert.h> 
//... 
void assert ( int expression );
 
- если при разработке используется такая среда разработки как Microsoft Visual C++,
тогда можно подключить специфичный заголовочный файл (additionally - msdn library)  
 
#include <crtdbg.h>
//... 
_ASSERT( booleanExpression );
 
 
Небольшой примерчик:
 

#include <stdio.h>      /* printf */
#include <assert.h>     /* assert */

void print_number(int* myInt) {
  assert (myInt!=NULL);
  printf ("%d\n",*myInt);
}

int main ()
{
  int a=16;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (b);
  print_number (c);

  return 0;
} 
 
В этом примере при втором вызове метода print_number (c) программа завершает свое 
выполнение - срабатывает assert(), был отловлен "пустой" указатель.
 
Следующий пример аналогичен, отличие только в демонстрации использования второго
подхода (использование среды разработки Microsoft Visual Studio)
     
 
#include <crtdbg.h>
#include <iostream>

void check( const int * pt )
{

 std::cout << "check pointer" << std::endl;
 _ASSERT( pt != NULL ); 

}

int main() {

 int a = 16;
 int * b = NULL;
 int * c = NULL;

 b = &a;

 check( b );
 check( c );

 return 0;

}
 
В итоге во время дебага будет отловлен пустой указатель - компилятор выкинет 
соответствующее сообщение - Debug Assertion Failed (см. рис.1).
 
рис.1 Debug Assertion Failed!