- void *addr = malloc(size * count);
- memset(addr, 0, size * count);
+ size_t bytes = 0;
+ if(__builtin_mul_overflow(size, count, &bytes)) {
+ // Multiplication overflowed.
+ throw std::bad_alloc();
+ }
+ void *addr = malloc(bytes);
+ memset(addr, 0, bytes);