Stack Overflow на русском Asked on August 30, 2021
Допустим, есть такой код:
cin >> size;
data = new color[size.x * size.y];
В случае, если размер не нулевой, data передаётся классу, который её удалит
Возникнет ли утечка памяти, если размер окажется нулевым?
Или всё же следует сделать проверку на размер до создания массива? (или удалять нулевой)
cin >> size;
data = size.x * size.y > 0 ? new color[size.x * size.y] : nullptr;
Ну, если я верно понимаю пункт 6.7.5.4.1 стандарта, то выделять нулевой размер вы можете, но использовать полученный указатель - нет
The effect of indirecting through a pointer returned from a request for zero size is undefined
Но все, что выделено - должно быть освобождено. Вполне может быть так, что память выделяется - просто для того, чтобы обеспечить требование стандарта, что два выделения памяти должны давать разные указатели. Или как-то иначе изменяет структуры менеджера памяти. Так что освобождать такую память все равно надо.
"По-моему, так" (с) Пух
Correct answer by Harry on August 30, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP