Próbuję zrozumieć wskaźniki i natknąłem się na ten fragment kodu, a ilekroć go kompiluję i wykonuję, adres zmienia się. Czy jest to jakaś wartość śmieciowa, czy wskaźniki rzeczywiście mają pamięć przydzieloną w drodze?Czy adresy wskaźnikowe zmieniają się za każdym razem, gdy program jest wykonywany w C?
Mój wiersz polecenia:
[email protected]:~/Desktop/Learn_C$ ./Practice
nNUmber is equal to : 15
nNumber is equal to : 25
0xbf98fd64
[email protected]:~/Desktop/Learn_C$ make Practice
make: 'Practice' is up to date.
[email protected]:~/Desktop/Learn_C$ ./Practice
nNUmber is equal to : 15
nNumber is equal to : 25
0xbfcce2a4
[email protected]:~/Desktop/Learn_C$ ./Practice
nNUmber is equal to : 15
nNumber is equal to : 25
0xbfa25df4
[email protected]:~/Desktop/Learn_C$ ./Practice
nNUmber is equal to : 15
nNumber is equal to : 25
0xbfecf104
Mój kod C:
#include <stdio.h>
int main()
{
int nNumber;
int *pPointer;
nNumber = 15;
pPointer = &nNumber;
printf("nNUmber is equal to : %d\n", nNumber);
*pPointer = 25;
printf("nNumber is equal to : %d\n", nNumber);
printf("%p\n", pPointer);
return 0;
}
Z góry dziękuję.
Jest to ogólna funkcja zabezpieczeń: [Randomizacja układu przestrzeni adresowej] (https://en.wikipedia.org/wiki/Address_space_layout_randomization) –
Dlaczego upadek. To jest uzasadnione pytanie. – alk