9999999999
или лучше, если 9,999,999,999
не находится в диапазоне int
, на который указывает dyn
, не имеет значения, сколько памяти выделено malloc
:
int *dyn = malloc(16); // `dyn` points to an `int` object, don´t matter
// if malloc allocates 16 bytes.
*dyn = 9999999999; // Attempt to assign an out-of-range value to an `int` object.
Объект типа int
должен выделяться 4 байтами в памяти самыми современными системами.
4 байта могут содержать максимум 2 ^ (8 * 4) = 2 ^ 32 = 4 294 967 296 значений.
Теперь у вас есть тип int
, который эквивалентен типу signed int
.
signed int
может хранить положительные и отрицательные числа, но так как он может хранить положительные и отрицательные числа Числа у него совсем другой диапазон.
signed int
имеет диапазон от -2 147 483 648 до 2 147 483 647, а также диапазон int
.
Таким образом, вы не можете удерживать 9 999 999 999 в int
объект, поскольку максимальное значение, которое может хранить объект int
, равно 2 147 483 647.
Если вы хотите сохранить значение 9 999 999 999 или 9999999999
в объекте, используйте fe long long int
, но не long int
, поскольку long int
может содержать одинаковый диапазон int
и unsigned int
:
long long int *dyn = malloc(16); // `dyn` points to an `long long int` object.
*dyn = 9999999999; // Fine, because 9999999999 is in the range of an `long long int` object.