Inicjalizacja wskaźnika NULLem w funkcji

Inicjalizacja wskaźnika NULLem w funkcji
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

Hej dzisiaj już kompletnie zgłupiałam. Dlaczego nie mogę zainicjować wskaźnika NULLem po zwolnieniu w funkcji?

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void f_free(char *ptr)
{
	free(ptr);
	ptr = NULL;
}

int main(void)
{
	char *ptr = strdup("costam");
	f_free(ptr);
	//ptr = NULL;
	if(!ptr) printf("NULL\n");
	return 0;
}
złoty
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 116
1

Jeżeli chcesz zmienić wartość w ptr, musisz np. przekazać wskaźnik do wskaźnika

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void f_free(char **ptr)
{
    free(*ptr);
    *ptr = NULL;
}

int main(void)
{
    char *ptr = strdup("costam");
    f_free(&ptr);
   // ptr = NULL;
    if(ptr == NULL) printf("NULL\n");
    return 0;
}

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Pamiętaj cokolwiek przekazujesz do funkcji - przekazujesz jako kopię.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

okey już chyba rozumiem. szkoda, że Eclispe nie podkreśla takich rzeczy ;/

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

A czemu ma podkreślać?
Jak napiszesz X=0 też ma podkreślać? (zainicjalizowałaś X wartością 0)

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0
Kopiuj
void f_free(char *ptr)
{
    free(ptr);
    ptr = NULL;
}
int f_2(int n) {
	n = 2;
	return 0;
}

@_13th_Dragon a czy mają jakiś sens takie przypisania do tych kopii? ofc gdy potem nie ma żadnych instrukcji z wykorzystaniem ww. dla mnie mógłby takie coś podkreślić :P

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeżeli masz gcc to dodaj opcje: -Wall -pedantic
Będzie dawać w tych miejscach ostrzeżenie że zmienna zainicjalizowana ale nie użyta.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

pewnie, że mam GCC i używam tej opcji niestety w przypadku pointerow tak już nie podkreśli

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.