Chcę usunąć dynamicznie przydzieloną tablicę, przechodząc przez wszystkie elementy i wywołując delete
na każdym z nich.
(Robię to, ponieważ muszę "przenieść" tablicę do innej lokalizacji, to znaczy skopiować oryginalną tablicę, a następnie ją usunąć, ale to zajęłoby 2x czas niż jednoczesne skopiowanie każdego elementu i wywołanie na nim delete
indywidualnie)Usuwanie elementów tablicy dynamicznej jeden po drugim
mam następujący kod:
int main()
{
int *n=new int[2];
delete n;
delete (n+1);
}
ale otrzymuję błąd segmentacji za każdym razem uruchomić to ....
Chociaż to działa prawidłowo -:
int main()
{
int *n=new int[1];
delete n;
}
Domyślam się, że delete kasuje całą tablicę zamiast pojedynczego elementu!
Czy ktoś mógłby wyjaśnić, jeśli moje przypuszczenie jest słuszne, a jeśli tak, zasugerować możliwe obejście tego problemu?
Używam GCC 4.7.3 na Ubuntu 13.04
Najprostszym sposobem na to jest użycie standardowych kontenerów C++ ('std :: vector' w tym przypadku) zamiast dynamicznych tablic i po prostu użyj metody wymazywania kontenera. Ale z drugiej strony, co próbujesz zrobić? Dlaczego chcesz usuwać elementy jeden po drugim? – Manu343726
Właściwie to próbowałem stworzyć kolejny pojemnik podobny do wektora. [Tylko po to, aby lepiej zrozumieć, w jaki sposób 'std :: vectors' działa pod maską] –
@Ammol nauczyć się C++? ok. Więc twoje pytanie dotyczy destruktora wektora? Właśnie dlatego próbujesz usunąć jeden element po jednym? – Manu343726