Fifo-problem z operatorem delete

0

Witajcie, mam problem z dynamiczną alokacją pamięci, a w szczególności z jej zwolnieniem. W funkcji pop() tworzę dynamicznie nową tablicę i przepisuję do niej wartości z tablicy głównej kolejki, oprócz tego, który został usunięty. Później do głównej tablicy podstawiam wskaźnik do tej nowej, ale gubię wskaźnik do pierwotnej tablicy bez zwolnienia pamięci. Próbowałem użyć operatora delete tuż przed linią tablica=z , ale kompilator (VS 2012) rzuca błędem.

Tutaj kod:

#include <iostream>
#include <Windows.h>

using namespace std;

int rozmiar = 4;
int *tablica = new int[rozmiar];
int ile=0;

void wyswietl(){
	system("cls");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
	cout<<endl;
	cout<<"-----------------"<<endl;
	cout<<"ZAWARTOSC KOLEJKI"<<endl;
	cout<<"-----------------"<<endl;
	
	if(ile==0) cout<<"pusta"<<endl;
	else{
		for(int i=0;i<ile;i++) {
			cout<<tablica[i]<<" ";
		}
	}
	cout<<endl;
	cout<<"-----------------"<<endl;
}

void push(){
	cout<<"Podaj liczbę do wstawienia: ";
	int x;
	cin>>x;

	if(ile<rozmiar){
		tablica[ile]=x;
		ile++;
	}

	else if(ile>=rozmiar){
		rozmiar=2*rozmiar;
		tablica[ile]=x;
		ile++;
	}
}

void pop(){

	if(ile==0){
		cout<<"Brak elementów w kolejce";
		
	}
	else{
		cout<<"Wyjęty element, to: "<<tablica[0];
		ile--;
		int *z = new int[rozmiar];
		for(int i=1;i<=ile;i++)z[i-1]=tablica[i];
		tablica=z;
	}
	Sleep(2000);
}



int main(){

	int obsluga=0;
	do{
		wyswietl();
	cout<<"1-push, 2-pop,3-liczba elementow, 4-zakoncz"<<endl;
	cin>>obsluga;

	switch(obsluga){
	case 1: push();
	break;
	case 2:pop();
		break;
	case 3:{
		cout<<"Liczba elementow: "<<ile<<endl;
		Sleep(2000);
		   }
	}

	}while(obsluga!=4);
	delete [] tablica;

	return 0;
}
3
  1. Zmienne globalne.
  2. Gołe new / delete
  3. Memory leak.
2

....
4. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
5. Zapoznaj się z inkrementacją bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
6. Nie używaj innego niż angielskie nazewnictwo: http://4programmers.net/Forum/1208091
7. Po kiego tworzysz dodatkową tablicę skoro można to zrobić "w miejscu"?
8. Zrób to za pomocą bufora cyklicznego i żadnych przemieszczeń nie trzeba będzie robić.

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