Sprawdzenie pustego wskaźnika nie działa

0

Zrobiłem listę i mam takie coś w momencie dodawania elementu do listy:

 
nodeStruct newNodeStruct = *new nodeStruct(hwnd);
	if (!firstNodeStruct)
	{
		firstNodeStruct = &newNodeStruct;
		firstNodeStruct->nextNodeStruct = NULL;
	}
	else
	{
		nodeStruct *temp = firstNodeStruct;
		while (temp->nextNodeStruct != NULL)
		{
			temp = temp->nextNodeStruct; //nie znajduje nextNodeStruct (?)
		}
		temp->nextNodeStruct = &newNodeStruct;
		temp->nextNodeStruct->nextNodeStruct = NULL;
	}

I to działa teoretycznie dobrze do momentu w krórym temp->nextNodeStruct jest NULLem. Wtedy sypie program.
Nie powinno po prostu przerwać pętli?

2

Przypisujesz wskaźnik(i) na zmienną lokalną, to nie ma prawa zadziałać.

1
nodeStruct newNodeStruct = *new nodeStruct(hwnd);

To coś oznacza alokuj na stercie zmienną type nodeStruct, potem przypisz kopię tego obiektu do zmiennej newNodeStruct. Dziwna konstrukcja i wyciek pamięci gratis.

1
Zelman666 napisał(a):

Zrobiłem listę i mam takie coś w momencie dodawania elementu do listy:

 
nodeStruct newNodeStruct = *new nodeStruct(hwnd);

[...]
  1. przedpiszcy już wspomnieli - żle zadeklarowane
  2. mam nadzieję, że pamiętasz, że dafaultowo new rzuca wyjątek przy niepowodzeniu i obsługujesz ten przypadek? Jeśli liczysz na to, że zwróci NULL, o tylko jeśli ustawisz odpowiednie parametry kompilacji (jeśli kompilator pozwala na to), albo używając parametru std::nothrow

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