Undefined Behaviour - MarekBykowski/readme GitHub Wiki
| # |
Name |
What happens |
Fix |
| ☠ |
Signed overflow |
INT_MAX + 1 — compiler may remove checks |
use unsigned or check before |
| ☠ |
Strict aliasing |
*(uint32_t*)&float_var — wrong value at -O2 |
use memcpy() or union |
| ☠ |
No sequence point |
printf("%d %d", *p++, *p++) — anything goes |
one *p++ per statement |
| ☠ |
Null deref before check |
*p = 42; if(p==NULL) — branch eliminated |
check before deref |
// ; is a sequence point — side effects committed before next statement
printf("%d ", *p++); // ok — p++ committed after ;
printf("%d ", *p++); // ok — p already advanced
printf("%d\n", *p); // ok — no modification