Új hozzászólás Aktív témák
-
Karma
félisten
válasz
TheProb
#4387
üzenetére
Az előző álláspontomat szem előtt tartva azért csak kifejtem egy kicsit.
Az alapprobléma az, hogy C-ben és más alacsonyabb szintű nyelveken a memóriakezelést tudatosan kell csinálni, mert nincs az ember alatt védőháló. Mindig tisztában kell lenned azzal, hogy egy adott változó, tömb, karaterlánc hol jön létre, és mikor, ki által fog megsemmisülni. Olyan meg soha nincs, hogy a semmiből memória fakad és pont azt csinálja amit szeretnél.
A mutatott kódodban a romai változódat úgy deklaráltad, hogy egy 20 karakteres tömb, ami a függvényen belül él csak, amint véget ér, felszabadul, te meg nem férhetsz hozzá többet. Ez a sorsa mindennek, ami a stacken jön létre. A befoglaló függvény végén kaputt.
Ilyen minden lokális változó függvényen belül, a függvényeknek átadott paraméterek, az egymás után láncolt függvényhívások köztes eredményei, stb.
Memóriafoglalás tekintetében még két lehetőséged van: a magyar oktatásban "dinamikus memóriának" csúfolt heap; illetve nagyon leegyszerűsítve a "globális változók", a static terület. Utóbbinak inkább ne játssz a gondolatával se.
A programodat azon a két módon lehet megjavítani, amit az előbb is írtam:
1) vagy behozod a heapkezelést és az eredményt oda mented (malloc/free);
2) vagy egy olyan függvényt írsz, mint például az snprintf: a hívó fél gondoskodik arról, hogy legyen hova tenni az eredményt. Javaslom, hogy nézd meg annak a függvénynek a leírását.Ez utóbbi azért különösen jó, mert maga a rómaira átalakító függvényednek nem kell törődnie a memóriakezeléssel egyáltalán. Nem érdekli, hogy a hívója hol foglalt memóriát (stack/heap/static), csak az átalakítással kell törődnie. Nem az ő felelőssége.
Az intes részre nem tudok válaszolni, mert nem sikerült értelmeznem a kérdést.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- HiFi műszaki szemmel - sztereó hangrendszerek
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Cyberpunk 2077
- Megérkezett a Samsung Galaxy A37 és Galaxy A57
- Bestbuy játékok
- Mikrokontrollerek Arduino környezetben (programozás, építés, tippek)
- Mibe tegyem a megtakarításaimat?
- Tőzsde és gazdaság
- Lexus, Toyota topik
- A Föld teraformálásával építene galaktikus birodalmat Elon Musk
- További aktív témák...
- Vivo V50 Lite 8/256 5G Black + 90W charger - Új, bontatlan - 3 év papíros garancia!
- EliteBook 8 G1i 14 AI 14" FHD+ IPS Ultra 5 235U 16GB 256GB NVMe ujjlolv IR kam gar
- SK Hynix 8GB DDR5 RAM modulok több darab is van // Számla // Garancia //
- 16GB DDR4 RAM modulok 3600Mhz több darab // Számla // Garancia //
- Dell Latitude 7420 érintőkijelzős // Core i5 1145G7 // 16GB // 256GB // A- kategória
- Keresünk S24/S24+/24 Ultra/S24 FE
- 156 - Lenovo LOQ (15IRH8) - Intel Core i5-13505H, RTX 4060 (ELKELT)
- Motorola Edge 40 Pro 256GB, Kártyafüggetlen, 1 Év Garanciával
- Legion 5 GAMING Notebook! 16" OLED / RTX 5070 / Ultra 9 275HX / 32GB DDR5 / 1TB NVMe! BeszámítOK
- HP ELITE 8000 SFF PC: passzív VGA HDMI, C2D E8400 + 4GB RAM
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
