**1. feladat:** Milyen hibákat talál az alábbi megoldásokban?
m = malloc(80);
m = NULL;
**megoldás**: 80 bájt lefoglalása, majd a pointer nullázása. Probléma: - a lefoglalt 80 byte nem szabadul fel.
free(n);
n = 5;
**megoldás**: felszabadított memóriaterületre akarunk írni.
char *p;
*p = ’a’;
**megoldás**: nem inicializált pointert akarunk használni.
**2.Feladat:**: Az alábbi 3 függvényből melyik helyes, illetve hibás?
int* f(void)
{
int x = 10;
return (&x);
}
int* g(void)
{
int * p;
*p = 10;
return p;
}
int* h(void)
{
int *p;
p = (int *) malloc (sizeof(int));
return p;
}
**megoldás**: csak a h() függvény helyes. A f() és g() hibásak, mert ezekben az esetekben a memóriacím a veremben jön létre és a visszaadott érték helytelen memóriacímre fog mutatni.
**3.Feladat:**: Mi lesz az alábbi program kimenete?
#include
void f(int *a)
{
a = (int*)malloc(sizeof(int));
}
int main()
{
int *p;
f(p);
*p = 10;
printf("%d",*p);
}
**megoldás**: nem ír ki semmit, hanem lefagy.
**4.Feladat:**: Hogyan lehetne kijavítani az előző feladatban szereplő programot?
**megoldás**: az előző program azért nem működik, mert a pointer nincs inicializálva, ezért a 0-s memóriacímet adja át az f() függvénynek, így a malloc lefoglalja a 4 byte-ot, de hibás helyre írja vissza. A javítás során vegyük figyelembe, hogy egy pointerre mutató pointer már ténylegesen a p változó címét adja vissza, amibe már a f() malloc()-ja már be tudja írni a lefoglalt memória címét.
#include
void f(int **a)
{
*a = (int*)malloc(sizeof(int));
}
int main()
{
int *p;
f(&p);
*p = 10;
printf("%d",*p);
}
**5. Feladat:**: Mi a probléma következő programmal?
#include
int main()
{
float *p = (float *)malloc(sizeof(float));
p = NULL;
free(p);
}
**megoldás**: a p NULL-ázása után, a free() nem tudja, hogy hol van az a memóriacím, amit fel kell szabadítani. A free() nem a p változót, hanem az abban tárolt címet szabadítja fel.