Funkcja zmienia wskaźnik podawany przez referencję bez przyczyny

0

Mam problem z taką oto funkcją:

void Test(Node** &node)
{
	return;
}

Nie robi ona nic, a mimo to zmienia mi wartość node, poniższe screeny doskonale to ilustrują:
Przed wejściem do funkcji wszystko jest w porządku:

screenshot-20180516122706.png

Następnie wchodzimy do funkcji i nadal jest ok:

screenshot-20180516122808.png

A po przejściu w debuggerze o jeden krok dalej, node i tym samym ptrlow się zmieniają:

screenshot-20180516122902.png

Byłbym naprawdę wdzięczny gdyby ktoś wytłumaczył mi powód takiego zachowania.

0

Wyszedłeś z ramki stosu przeznaczonej dla funkcji, więc nie widzisz jej zawartości. Jak wrócisz do funkcji wyżej to zobaczysz, że wartość nie została zmieniona.

0

Wiem, że tak powinno być, mój błąd w doborze screenów, spójrz na tego:
screenshot-20180516123632.png

Widać, że jednak wartość się zmieniła

0

Ja tam wszędzie widzę wartość wskaźnika 0xFC92D0

0

*ptrlow się zmienił, na początku miał wartośc taką jak root tj. 0xFC92D0, a po wywołaniu funkcji 0xcccccc

0

Kurde, rzeczywiście. Ustaw breakpoint na jego zmianę, upewnij się, że kod odpowiada wersji skompilowanej.

0

A mógłbyś podpowiedzieć jak to zrobić?

2

Powiedziałbym raczej, że Debug | New Breakpoint | New Data Breakpoint.... Taki Data Breakpoint zatrzyma wykonywanie programu za każdym razem jak zmieniona zostaje wartość pod zadanym obszarem pamięci.

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