User Tools

Site Tools


tanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben [2025/03/12 19:01] kneheztanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben [2025/03/13 22:13] (current) – [Ellenőrző kérdések] knehez
Line 85: Line 85:
  
 **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. **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.
 +Az f() és g() esetén lokális változókat hozunk létre, és ezekre mutató memóriacímet adunk vissza. A függvény használatakor, a használat után ezek a memóriacímek nem használhatók tovább. 
 +A h() esetén is a p változó lokális lesz, az is megszűnik a függvény használata után, de a malloc() által visszaadott memória cím (mint számérték továbbra is használható) a ''return p'' itt is nem a p-t, hanem a p-ben tárolt címet adja vissza, ami a h() esetén továbbra is használható.
 +
 +//A példa azt mutatja, hogy a malloc() által létrehozott cím és a mögötte lefoglalt memória globális, nem számít hol hívtuk meg.//
  
 ---- ----
Line 107: Line 111:
 </sxh> </sxh>
  
-**megoldás**: nem ír ki semmit, hanem lefagy. +**megoldás**: nem ír ki semmit, hanem lefagy.
  
 ---- ----
Line 148: Line 152:
 </sxh> </sxh>
  
-**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. free() nem a p változót, hanem az abban tárolt címet szabadítja fel.+**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() igazából nem egy változót magát, hanem a benne tárolt memória címet (mint számértékhez tartozó foglalást) szünteti meg.) Más szóval: a free() nem a p változót, hanem az abban tárolt címet szabadítja fel.
  
 +===== Ellenőrző kérdések =====
 +
 +**Mi a helyes deklarációja egy int típusra mutató pointernek?**
 +  
 +  A) int p*;
 +  B) int *p;
 +  C) pointer int p;
 +  D) int &p;
 +
 +Megoldás: B
 +
 +----
 +
 +**Hogyan lehet helyesen lefoglalni memóriát egy 10 elemű int tömbnek dinamikusan?**
 +
 +  A) int *arr = malloc(10);
 +  B) int arr = malloc(10 * sizeof(int));
 +  C) int *arr = malloc(10 * sizeof(int));
 +  D) int arr[10] = malloc(sizeof(int));
 +
 +Helyes válasz: C
 +
 +----
 +**Mi lesz az eredmény?**
 +
 +<sxh c>
 +int array[] = {100, 200, 300};
 +int *ptr = array;
 +printf("%d", *(ptr++));
 +printf("%d", *ptr);
 +</sxh>
 +
 +  A) 100200
 +  B) 200300
 +  C) 100100
 +  D) 200200
 +
 +Megoldás: A. *(ptr++) előbb kiírja a 100-at, majd eggyel tovább lépteti a pointert. A következő kiírás már a 200-ra mutat.
 +
 +----
 +**Melyik állítás igaz az alábbiak közül?**
 +
 +  A) Egy pointer típusa nem függ attól, hogy milyen adatra mutat.
 +  B) Egy pointer mindig egész számot tárol.
 +  C) Pointerek aritmetikája nem megengedett C-ben.
 +  D) Egy pointer típusa meghatározza, hogy milyen típusú adatot érhetünk el rajta keresztül.
 +
 +Helyes válasz: D
 +
 +----
 +**Mi lesz az eredmény?**
 +
 +<sxh c>
 +int x = 5, y = 10;
 +int *p = &x;
 +int *q = &y;
 +*p = *q;
 +printf("%d %d", x, y);
 +</sxh>
 +
 +  A) 5 10
 +  B) 10 10
 +  C) 5 5
 +  D) 10 5
 +
 +Helyes válasz: B. 
 +
 +----
 +**Mire mutat a p pointer a következő deklaráció után?**
 +
 +<sxh c>
 +int arr[10];
 +int *p = arr;
 +</sxh>
 +
 +  A) Az arr tömb első elemére
 +  B) Az arr tömb utolsó elemére
 +  C) Az arr tömb méretére
 +  D) Véletlenszerű memória címre
 +
 +Megoldás: A
 +
 +----
 +**Mi a hiba a következő kódrészletben?**
 +
 +<sxh c>
 +int num = 20;
 +int *ptr;
 +*ptr = num;
 +</sxh>
 +
 +  A) Érvénytelen pointer-dereferencia (nem inicializált pointer)
 +  B) Szintaktikai hiba
 +  C) Hiányzó pontosvessző
 +  D) A num változó helytelen típusa
 +
 +Megoldás: A
 +
 +----
 +**Mi lesz a következő kód kimenete?**
 +
 +<sxh c>
 +char *str = "Hello";
 +printf("%c", *(str+1));
 +</sxh>
 +
 +  A) H
 +  B) e
 +  C) l
 +  D) o
 +
 +Megoldás: B
 +
 +----
 +**Mit jelent, ha egy pointer NULL értékű?**
 +
 +  A) A pointer érvényes memória címre mutat
 +  B) A pointer egy egész számot tárol
 +  C) A pointer nem mutat érvényes memória címre
 +  D) A pointer konstans értékre mutat
 +
 +Megoldás: C
 +
 +----
 +**Mi lesz a következő kód kimenete?**
 +
 +<sxh c>
 +int a[] = {2, 4, 6, 8};
 +int *p = a;
 +printf("%d", *(p + 2));
 +</sxh>
 +
 +  A) 2
 +  B) 4
 +  C) 6
 +  D) 8
 +
 +Megoldás: C
 +
 +----
 +**Melyik operátor adja vissza egy változó memória-címét?**
 +
 +  A) *
 +  B) &
 +  C) %
 +  D) #
 +
 +Megoldás: B
 +
 +----
 +**Mit ír ki a következő programrészlet?**
 +
 +<sxh c>
 +int x = 5;
 +int *p = &x;
 +*p = 10;
 +printf("%d", x);
 +</sxh>
  
 +  A) 5
 +  B) 0
 +  C) 10
 +  D) véletlenszerű érték
  
 +Megoldás: C , mivel az x értéke megváltozik a pointeren keresztül
tanszek/oktatas/muszaki_informatika/memoria_kezeles_c-ben.1741806083.txt.gz · Last modified: 2025/03/12 19:01 by knehez