[C++]Podstawianie do wskaźnika wartości


(chasar) #1

Witam,

mam problem tj. w temacie,

konkretnie chodzi mi ze w różnych książkach, tutorialach, artykułach w necie często używają takiego czegoś,

*wskaźnik = 10

a mi to nie działa,

konkretnie program się kompiluje ale automatycznie się wyłącza jak dochodzi do momentu tej linijki,

żadnych błędów i ni nic.

proszę o pomoc.


(Sawyer47) #2

Pokaż cały kod, albo przynajmniej fragment, którego dotyczy ta zmienna. Zapewne piszesz po nieswojej pamięci i stąd proces jest ubijany.


(chasar) #3

właśnie w tym sęk ze tu nie ma nic do pokazywania za dużo.

klik


(Sawyer47) #4

Tworzysz wskaźnik, który domyślnie nie wskazuje na nic sensownego, piszesz po mniej lub bardziej losowej, ale na pewno nie twojej pamięci. Wskaźnik służy do wskazywania na jakiś obszar pamięci, jednak najpierw musisz ten obszar zaalokować (lub ustawić wskaźnik na już zaalokowaną pamięć).


(chasar) #5

rzeczywiście już działa, bardzo dziękuje.


(Xeon Bloomfield) #6

Kod:

#include 

#include 


using namespace std;


int main()

{

	int *iTemp = (int *) malloc(sizeof(int));

	*iTemp = 2;


	cout << "*iTemp: " << *iTemp << endl;

	cout << "iTemp: " << iTemp << endl;


	free(iTemp);


	return 0;

}

Output:

*iTemp: 2

iTemp: 0x88ed008

*iTemp - to wartość zmiennej, która jest zaalokowana w pamięci.

iTemp - to adres w pamięci, gdzie jest zaalokowana zmienna.

Jeżeli tworzysz wskaźnik - pamiętaj, że musi gdzieś wskazywać.


(Sawyer47) #7

@up:

Jeśli się już daje przykład to należy pamiętać o dealokacji pamięci. Druga kwestia, to adres zaalokowanej pamięci to nie jest przypadkiem iTemp, natomiast &iTemp to adres wskaźnika?


(Xeon Bloomfield) #8

Poprawione...


(Simon1991) #9

I nie oszukujmy się, ale malloc to troszkę przestarzała funkcja wywodząca się z C. W C++ zalecane jest używanie new.