Como el otro han dicho, debe utilizar la forma vectorial de borrado:
void some_func(size_t n)
{
int* data = new int[n];
. . . // do stuff with the array
delete [] data; // Explicitly free memory
}
ser muy cuidadosos de esto, debido a que algunos compiladores no advertirle.
Aún mejor, raramente hay necesidad de usar vector new/delete.Considere si su código puede ser alterado para hacer uso de 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
Y si se trata de la memoria en un ámbito local, considere el STLSoft 's auto_buffer, que destinará a un buffer interno (que tuvo lugar en la pila, como parte de la instancia) si es posible, sólo va a la pila si no puede:
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
Leer more about auto_buffer.
Eso invoca un comportamiento indefinido porque la matriz no estaba asignada con new []. –