• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyjątek - program wyzwolił pkt przerwania

0 głosów
66 wizyt
pytanie zadane 25 stycznia w C i C++ przez Ryszard Kałuziński Początkujący (280 p.)
struct chromosom
{
	int numer;
	chromosom * pNext;
};

struct osobnik
{
	double f;
	chromosom * glowa;
	osobnik * pNext;
};

void dopasowanie(osobnik*&pierwszy, double w, double r)
{
	int f=0;
	double q = 0;
	chromosom* usun = nullptr;
	osobnik* element = pierwszy;
	osobnik* poprzedni = pierwszy;
	while (element)
	{
		if (element->f == -1)
		{
			f = 0;
			chromosom*wsk = element->glowa;
			while (wsk)
			{
				f = f + wsk->numer;
				wsk = wsk->pNext;
			}
			cout << "#" << endl;
			q = f = (f % 100);
			q = q / 100;
			cout << q << endl;
			element->f = q;
			if (element->f < w)
			{
				pierwszy = pierwszy->pNext;
				while (element->glowa)
				{
					usun = element->glowa;
					delete element->glowa;         //tutaj Element ConsoleApplication2.exe wyzwolił punkt przerwania.: wystąpił wyjątek
					element->glowa = usun;		 
				}
				delete element;
			}
			if (element -> f > r)
			{
				chromosom* glowa = nullptr;
				chromosom* aktualny = glowa;
				usun = element->glowa;
				cout << "$" << endl;
				while (usun)
				{
					aktualny = new chromosom{ usun->numer,nullptr };
					aktualny = aktualny->pNext;
					usun = usun->pNext;
				}
				
				pierwszy = new osobnik{q, glowa, pierwszy };
			}
		}
		element = element->pNext;
	}

}

Mam problem, mianowicie wywala mi wyjątek. Funkcja dopasowanie ma na nadanie nadać strukturze osobnik losową wartość f po czym dla f<w usunąć osobnika i przypisaną do niego listę chromosomów, a dla f>r sklonować osobnika.

1 odpowiedź

0 głosów
odpowiedź 25 stycznia przez adrian17 Mędrzec (199,740 p.)
                while (element->glowa)
                {
                    usun = element->glowa;
                    delete element->glowa;         //tutaj Element ConsoleApplication2.exe wyzwolił punkt przerwania.: wystąpił wyjątek
                    element->glowa = usun;        
                }

Um, na oko ta pętla nie ma sensu?

                    usun = element->glowa;
                    element->glowa = usun;        

Te linie w praktyce nic nie robią, element->glowa się nie zmienia. Więc pętla będzie się kręciła w nieskończoność... ale nie będzie, bo wielokrotnie robisz `delete` na tej samej rzeczy - pewnie dlatego jest wyjątek.

komentarz 25 stycznia przez Ryszard Kałuziński Początkujący (280 p.)
jeśli mam już napisaną osobną funkcję do usuwania osobnika razem z chromosomami to mogę jej tam użyć?
komentarz 25 stycznia przez adrian17 Mędrzec (199,740 p.)
Um, nie wiem. Za mało znam ten kod, a Ty go znasz całkowicie.

Podobne pytania

0 głosów
1 odpowiedź 56 wizyt
0 głosów
1 odpowiedź 166 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Mądrala (6,170 p.)
0 głosów
0 odpowiedzi 31 wizyt
pytanie zadane 26 stycznia w C i C++ przez Ryszard Kałuziński Początkujący (280 p.)
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

66,453 zapytań

113,207 odpowiedzi

239,680 komentarzy

46,704 pasjonatów

Przeglądających: 282
Pasjonatów: 19 Gości: 263

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...