Sari la conținut

Postări Recomandate

  • Moderators
Postat

** POINTERI NULI SAU INVALIZI  **

* In programare , vor exista situatii cand declaram dinamic o variabila , o folosim iar dupa va trebui sa o eliberam din memorie . In acest context (dupa eliberare) , pointerul respectiv devine INVALID si poate produce o eroare de tip runtime (In timpul rularii programului)  daca acesta este accesat accidental . 

#include <stdio.h>
#include <stdlib.h> // Pentru alocare dinamica 


int main()
{

	int* pointer;

	pointer = (int*)malloc(sizeof(int)); // Alocam in memorie o variabila de tip intreg  

	// VOM DISCUTA ULTERIOR DESPRE ALOCARE DINAMICA IN DETALIU

	*pointer = 30; // Atribuim numarul 30 ;

	
	printf("%i\n", *pointer); // Afisam 30  OK

	free(pointer); // Eliberam memoria ==> *pointer devine invalid 

	
	printf("%i", *pointer); // EROARE ==>> *Pointer DEVINE DAGGLING 

	return 0;
}

* In astfel de situatii , apelam la pointer nuli . Practic atribuim valoarea "null" acelui pointer !! 

pointer = NULL; // DUPA ELIBERAREA MEMORIEI SE RECOMANDA sa fie atrebuit cu NULL 


// SAU CHIAR LA INITIALIZARE

NOTA ** :  SE RECOMANDA CA POINTERI CARE NU  POINTEAZA UN OBIECT VALID LA INCEPUT , SA FIE NOTATI CU NULL  !!  

** Pointeri Constanti  ** 

* Pointeri constanti sunt pointeri a carora adresa nu se poate modifica dupa initializare . Pot pointa atat valori modificabile (atat variabile cat si constante) . 

#include <stdio.h>

int main()
{

	int a = 100; // Variabila 

    int b = 50;  // Constanta (NU SE POATE MODIFICA VALOAREA)

	 int* const c = &a; // Pointer Constant pointeaza o variabila 

	 const int* const d = &b; // Pointer Constant pointeaza o constanta

	 // EROARE DACA INCERCAM SA FACEM  "c = &b" sau "d = &a"  pentru ca nu putem schimba adresa de memorie

	 // A DOUA SITUATIE 

	 *c = 30; // E OK (PUTEM SCHIMBA TOTUSI VALOAREA PENTRU CA POINTEAZA O VARIABILA)

	// *d = 30;  ///  EROARE NU PUTEM MODIFICA VALOAREA DEOARECE POINTAM O CONSTANTA

	 

	 printf("%d ||  %d ", *c , *d); // Afisam  30  |  50  

	

	return 0;
}

*  Pointeri care pointeaza valori constante NU SI POT MODIFICA VALOARE DAR SPRE DEOSEBIRE DE POINTERI CONSTANTI ISI POT MODIFICA ADRESA DE MEMORIE 

#include <stdio.h>
#include <stdlib.h> // Pentru alocare dinamica 


int main()
{

	const int a = 50;

	const int* ptr = &a;

	printf("%d \n", *ptr); // Afisam 50 (CONSTANTA A)

	/// *ptr = 100; // NU PUTEM MODIFICA VALOAREA POINTERULUI CARE POINTEAZA O VALOARE CONSTANTA

	// Totusi spre deosebire de pointeri constanti putem schimba adresa de memorie !!!!

	// astfel ca 

	const int b = 100;

	ptr = &b; // E OK , PUTEM SCHIMBA ADRESA DE MEMORIE 

	printf("%d", *ptr); // AFISAM CONSTANTA B (100)

	return 0;
}

 

Vizitator
Acest topic este acum închis pentru alte răspunsuri.
  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Termeni de Utilizare & Politică Intimitate