tanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
tanszek:oktatas:muszaki_informatika:memoria_kezeles_c-ben [2024/02/13 19:35] – létrehozva 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> | ||
- | int *f(void) | + | int* f(void) |
{ | { | ||
int x = 10; | int x = 10; | ||
Line 31: | Line 69: | ||
} | } | ||
| | ||
- | int *g(void) | + | int* g(void) |
{ | { | ||
int * p; | int * p; | ||
Line 38: | Line 76: | ||
} | } | ||
| | ||
- | int *h(void) | + | int* h(void) |
{ | { | ||
int *p; | int *p; | ||
- | p = (int *) malloc (sizeof(int)); | + | p = (int *) malloc (sizeof(int)); |
- | *p = 10; | + | |
return p; | return p; | ||
} | } | ||
Line 48: | 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 69: | Line 111: | ||
</ | </ | ||
- | **megoldás**: | + | **megoldás**: |
- | **4.Feladat: | + | ---- |
- | **megoldás**: | + | **Feladat: |
+ | |||
+ | **megoldás**: | ||
<sxh c> | <sxh c> | ||
Line 92: | Line 136: | ||
</ | </ | ||
- | **5. Feladat:**: Mi a probléma következő programmal? | + | ---- |
+ | |||
+ | **Feladat: | ||
<sxh c> | <sxh c> | ||
# | # | ||
Line 106: | 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.1707852903.txt.gz · Last modified: 2024/02/13 19:35 by knehez