Fifo-problem z operatorem delete

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:

Kopiuj
#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;
}
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
3
  1. Zmienne globalne.
  2. Gołe new / delete
  3. Memory leak.

do not code, write prose
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
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ć.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.