błąd przy zwalnianiu pamięci (delete)

0

Witam

mam taki kod (właściwie pochodzi on z kursu Mirosława Zelenta)

#include <iostream>
#include <ctime>

using namespace std;

int ile;

int main() 
{
cout << "Ile liczb w tablicy: ";
cin >> ile;

int *tablica;
tablica = new int [ile];

for (int i=0; i<ile; i++)
{
    cout <<(int)tablica<<endl;
    tablica++;
}
delete[] tablica;

return 0;

}

przy odpaleniu programu dostaję adresy poszczególnych komórek pamięci, jednak pod nimi pojawia się błąd:

  • Error in `./a.out': free(): invalid pointer: 0x082fe010 ***
    Przerwane (core dumped)

W czym leży problem?

3
delete[] tablica;

Tutaj tablica już nie wskazuje na początek tego bloku pamięci, który rezerwowałeś.

int* tablica = new int[ile];
int* pocz = tablica;
...
delete[] pocz;
1

Przesunąłeś wskaźnik za tablicę i próbujesz zwolnić nie swoją pamięć.

0

Dzięki panowie!

0

W ogóle na przyszłość lepiej korzystać z std::vector, bo to właściwie na to samo wychodzi, a znacznie bezpieczniej. Ot taki malutki offtop...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0