Как уже сказал другой, вы должны использовать векторную форму удаления:
void some_func(size_t n)
{
int* data = new int[n];
. . . // do stuff with the array
delete [] data; // Explicitly free memory
}
Будьте очень осторожны с этим, потому что некоторые компиляторы не будут не предупреждать вас.
Еще лучше, очень редко возникает необходимость в использовании вектора new / delete. Подумайте, можно ли изменить ваш код, чтобы использовать std :: vector:
void some_func(size_t n)
{
std::vector<int> data(n);
. . . // do stuff with the array
} // memory held by data will be freed here automatically
И если вы имеете дело с памятью в локальной области, рассмотрите возможность использования STLSoft ' auto_buffer , который будет выделяться из внутреннего буфера (хранится в стеке, как часть экземпляра), если это возможно, переходить в кучу, только если он не может:
void some_func(size_t n)
{
stlsoft::auto_buffer<int, 10> data(n); // only allocates if n > 10
. . . // do stuff with the array
} // memory held by data will be freed here automatically, if any was allocated
Читать подробнее об auto_buffer .