letta pisze:Nie wiem czym (i czy w ogóle) różnią się dwa poniższe zapisy i od czego zależy kiedy którego powinno się używać:
1.
2.
To jest po prostu rzutowanie zmiennej wskaźnikowej na typ
z typu
Krótko mówiąc -
trzeba było tak robić w starszych wersjach C, ale od zdaje się C99 już nie trzeba, a nawet jest to niezalecane. Dlatego możesz ten nawias przed mallociem pomijać.
letta pisze:Podobny problem mam ze zwalnianiem pamięci. W kilku różnych opracowaniach znalazłam takie zapisy:
1.
2.
3.
Czym one się różnią i od czego zależy kiedy którego powinnam użyć? Do czego służą drugie linijki w tych pierwszych dwóch?
Z góry dziękuję za pomoc
To drugie jest bez sensu.
co do 1. i 3., przeanalizuj sobie taki kod
Kod: Zaznacz cały
#include <stdlib.h>
#include <stdio.h>
int main()
{
int *x = malloc(sizeof(int));
*x = 5;
free(x);
//x = NULL;
if(x != NULL)
{
*x = 1;
printf("%d", *x);
}
return 0;
}
jest to po prostu dobra praktyka, aby tworzyć bezpieczny kod i uniknąć czegoś takiego jak powyżej.