TransWikia.com

Обязятельно ли удалять массив с нулевым размером?

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;

One Answer

Ну, если я верно понимаю пункт 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP