Inicjalizacja wskaźnika NULLem w funkcji

0

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

#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;
}
1

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

#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;
}

1

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

0

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

0

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

0
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

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.

0

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

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