tablica dynamiczna-zwalnianie pamięci

Odpowiedz Nowy wątek
2010-11-30 15:34
kompresor
0

Witam
Mam taki kawałek kodu z dwoma tablicami dynamicznymi, czemu jeśli chce na końcu usunąć te tablice, to program się wysypuję?
Usuwam tak:

delete [] tab;
delete [] t; 

Cały kod źródłowy:

 #include <iostream>
int N;

using namespace std;

int *tab = new int [N]; 
int *t = new int [N];  // Tablica pomocnicza

/* Scalanie dwoch posortowanych ciagow
   tab[pocz...sr] i tab[sr+1...kon] i
   wynik zapisuje w tab[pocz...kon] */
void merge(int pocz, int sr, int kon)
{
  int i,j,q;
  for (i=pocz; i<=kon; i++) t[i]=tab[i];  // Skopiowanie danych do tablicy pomocniczej
  i=pocz; j=sr+1; q=pocz;                 // Ustawienie wskaźników tablic
  while (i<=sr && j<=kon) {       // Przenoszenie danych z sortowaniem ze zbiorów pomocniczych do tablicy głównej
    if (t[i]<t[j])
        tab[q++]=t[i++];
    else
        tab[q++]=t[j++];
  }
  while (i<=sr) tab[q++]=t[i++];    // Przeniesienie nie skopiowanych danych ze zbioru pierwszego w przypadku, gdy drugi zbiór się skończył
}

/* Procedura sortowania tab[pocz...kon] */
void mergesort(int pocz, int kon)
{
  int sr;
  if (pocz<kon) {
    sr=(pocz+kon)/2;
    mergesort(pocz, sr);    // Dzielenie lewej części
    mergesort(sr+1, kon);   // Dzielenie prawej części
    merge(pocz, sr, kon);   // Łączenie części lewej i prawej
  }
}

int main() 
{
int i, liczba;
cout<<"Podaj ilosc liczb, ktore chcesz wczytac: ";
cin>>N;

for(int i=0; i<N; ++i)
{       cout<<"Wpisz liczbe: ";
        cin>>liczba;
        tab[i] = liczba;
}

cout<<"Zbior nieposortowany:\n";
for (i=0; i<N; i++)
   printf("%d ", tab[i]);

mergesort(0,N-1);

cout<<"\nZbior posortowany:\n";
for (i=0; i<N; i++)
   printf("%d ", tab[i]);

delete [] tab;
delete [] t;

system("pause");
}

Pozostało 580 znaków

2010-11-30 16:40
0

Na poczatku wczytaj N a dopiero później utwórz tablice..


i see dead pixels..
edytowany 1x, ostatnio: Carlos Spicy-Weener, 2010-11-30 16:42

Pozostało 580 znaków

2010-11-30 16:49
kompresor
0
sid90 napisał(a)

Na poczatku wczytaj N a dopiero później utwórz tablice..

Hmm, ale chyba tak się nie da zrobić, bo wczytać mogę tylko w main(), a potrzebuję tablice jako globalne, żeby można było na nich operować w funkcjach. No chyba żeby przerobić tak że te tablice dynamiczne byłyby przekazywane jako parametr tych moich funkcji?

Pozostało 580 znaków

2010-11-30 17:39
0

No co sie niby nie da ?

 #include <iostream>
int N;

using namespace std;

int *tab ;
int *t ;

/**/
int main() 
{
int i, liczba;
cout<<"Podaj ilosc liczb, ktore chcesz wczytac: ";
cin>>N;

tab = new int [N]; 
t = new int [N];  // Tablica pomocnicza

/**/

delete [] tab;
delete [] t;

system("pause");
}

edytowany 1x, ostatnio: dzejo, 2010-11-30 17:39

Pozostało 580 znaków

2010-11-30 19:01
0

kompresor a czy ciężko przekazać tablice jako parametr??


i see dead pixels..

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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