В приведенной ниже программе я назначил память только для 4 целых чисел, но программа, скомпилированная / построенная с помощью gcc 7.4.0, не дает сбоев. Это потому, что память рядом с назначенными 4 * 4 байтами не использовалась ...

-3
amitsati 6 Апр 2021 в 03:00

1 ответ

Лучший ответ

Когда вы читаете или пишете за пределами выделенной памяти, вы запускаете неопределенное поведение.

При неопределенном поведении стандарт C не дает никаких гарантий относительно того, что будет делать ваша программа. Он может дать сбой, может выдать странные результаты или (как в этом случае) может показаться, что он работает правильно. Кроме того, внесение, казалось бы, несвязанного изменения, такого как добавление неиспользуемой локальной переменной или вызов printf для отладки, может изменить способ проявления неопределенного поведения, равно как и компиляция с различными настройками оптимизации.

То, что программа может дать сбой, не означает, что это произойдет .

При этом, конкретная реализация malloc может выделить больше памяти, чем требуется, но опять же вы не можете полагаться на это. Единственная гарантия, которую вы имеете, - это то, что вы получите именно то количество байтов, которое вы просили.

0
dbush 6 Апр 2021 в 00:19