tanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| tanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben [2024/02/14 11:47] – knehez | tanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben [2025/03/13 22:13] (current) – [Ellenőrző kérdések] knehez | ||
|---|---|---|---|
| Line 6: | Line 6: | ||
| </ | </ | ||
| - | **megoldás**: | + | **megoldás**: |
| + | |||
| + | ---- | ||
| + | |||
| + | Egy pointerhez memória lefoglalása majd amikor már nincs rá szükség, akkor a felszabadítása az alábbi váz alapján valósítható meg. | ||
| + | |||
| + | <sxh c> | ||
| + | m = malloc(80); | ||
| + | // számolás.. egyéb kódok | ||
| + | free(m); | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Nézzük a következő hibás példát. Mi lehet a hiba? | ||
| <sxh c> | <sxh c> | ||
| Line 13: | Line 27: | ||
| </ | </ | ||
| - | **megoldás**: | + | **megoldás**: |
| + | |||
| + | ---- | ||
| + | |||
| + | A következő példában nem használunk dinamikus memóriafoglalást, | ||
| <sxh c> | <sxh c> | ||
| char *p; | char *p; | ||
| - | *p = ’a’; | + | *p = 'a'; |
| </ | </ | ||
| - | **megoldás**: | + | **megoldás**: |
| - | **2.Feladat: | + | ---- |
| + | |||
| + | **Feladat:**: foglaljunk le dinamikusan egy 10 elemű int vektort. | ||
| + | |||
| + | <sxh c> | ||
| + | #include < | ||
| + | |||
| + | int main() { | ||
| + | |||
| + | int *v = (int *)malloc(1000 * sizeof(int)); | ||
| + | free(v); | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | A kód igazából nem csinál túl sok használhatót, | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Feladat:**: Az alábbi 3 függvényből melyik helyes, illetve hibás? | ||
| <sxh c> | <sxh c> | ||
| Line 47: | Line 85: | ||
| **megoldás**: | **megoldás**: | ||
| + | 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 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 '' | ||
| + | //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.// | ||
| - | **3.Feladat:**: Mi lesz az alábbi program kimenete? | + | ---- |
| + | |||
| + | **Feladat: | ||
| <sxh c> | <sxh c> | ||
| Line 68: | Line 111: | ||
| </ | </ | ||
| - | **megoldás**: | + | **megoldás**: |
| - | **4.Feladat: | + | ---- |
| - | **megoldás**: | + | **Feladat: |
| + | |||
| + | **megoldás**: | ||
| <sxh c> | <sxh c> | ||
| Line 91: | Line 136: | ||
| </ | </ | ||
| - | **5. Feladat:**: Mi a probléma következő programmal? | + | ---- |
| + | |||
| + | **Feladat: | ||
| <sxh c> | <sxh c> | ||
| # | # | ||
| Line 105: | Line 152: | ||
| </ | </ | ||
| - | **megoldás**: | + | **megoldás**: |
| + | ===== 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(" | ||
| + | printf(" | ||
| + | </ | ||
| + | |||
| + | 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, | ||
| + | |||
| + | 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(" | ||
| + | </ | ||
| + | |||
| + | 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; | ||
| + | </ | ||
| + | |||
| + | 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; | ||
| + | </ | ||
| + | |||
| + | 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 = " | ||
| + | printf(" | ||
| + | </ | ||
| + | |||
| + | 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(" | ||
| + | </ | ||
| + | |||
| + | 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(" | ||
| + | </ | ||
| + | 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.1707911239.txt.gz · Last modified: 2024/02/14 11:47 by knehez
