La macro 'assert()' inclusa da <assert.h> valuta un'espressione come falsa, stampando l'espressione, il file e il numero di riga e invocando abort() per terminare il programma in fase di debug.
SIGABRT_ASSERT_FAIL
→
Tentare di scrivere con write() o send() su un socket TCP o una pipe Unix la cui estremità ricevente è stata già chiusa scatena il segnale SIGPIPE che termina il programma se non esplicitamente ignorato.
SIGPIPE_BROKEN_PIPE
→
Se un file mappato in memoria con 'mmap()' viene troncato o ridotto di dimensioni da un altro processo o chiamata 'ftruncate()', qualsiasi tentativo di accedere alle pagine virtuali oltre la nuova dimensione fisica solleva SIGBUS.
SIGBUS_MMAP_TRUNCATED
→
I gestori di segnali possono interrompere il flusso del programma in qualsiasi istante; invocare funzioni che utilizzano mutex interni o lo heap (come printf o malloc) all'interno di un signal handler provoca deadlock se il segnale ha interrotto la medesima funzione nel programma principale.
UNSAFE_SIGNAL_HANDLER
→
Un classico bug algoritmico in C: poiché un intero senza segno ('unsigned int' o 'size_t') non può mai essere negativo, l'espressione di controllo 'i >= 0' rimane sempre vera all'infinito saltando da 0 a 4294967295.
UNSIGNED_UNDERFLOW_LOOP
→
L'operazione di shift a sinistra o destra ('x << n') è indefinita se 'n' è negativo oppure maggiore o uguale al numero totale di bit del tipo dell'operando (es. '1U << 32' su interi a 32 bit).
SHIFT_COUNT_OVERFLOW
→
Quando un programma multithread invoca 'fork()', nel processo figlio sopravvive unicamente il thread chiamante; se gli altri thread avevano mutex bloccati al momento del fork, tali mutex rimarranno bloccati per sempre nel figlio causando deadlock.
FORK_MULTITHREAD_DEADLOCK
→
A dispetto del nome, questo segnale viene scatenato comunemente da un'operazione di divisione intera per zero ('x / 0') o calcolo del modulo ('x % 0'), provocando l'interruzione immediata del processo.
SIGFPE_DIV_ZERO
→