 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
RokO Član

Pridružen-a: Čet 23 Nov 2006 11:14 Prispevkov: 120 Aktiv.: 0.53 Kraj: Kranj
|
Objavljeno: Čet Mar 05, 2009 11:15 pm Naslov sporočila: [C] Problem s spremenljivkami |
|
|
Pozdravljeni, imam problem s prekrivanjem polj (array) spremenljivk tipa char.
Program je sledeč:
Najprej na začetku definiram globalno spremenljivko (polje)
char buffer[256];
...
potem sledi main funkcija, v kateri tečejo podfunkcije, ki med drugim tudi polnejo buffer. V eni izmed teh funkcij ponovno definiram lokalno spremenljivko (polje)
char lokalni_buffer [128] in jo začnem polniti. Tu se pojavi problem, opazim namreč, da s tem ko vpisujem v spremenljivko lokalni_buffer, spreminjam tudi globalno spremenljivko - kakor da bi bili definirani v istem prostoru v spominu.
Kako bi odpravil ta problem, saj potrebujem obe spremelnjivki (polja) istočasno?
Nekaj sem sposkušal z metodo malloc(), vendar se stvar ni izboljšala...
uC je LPC2103, uporabljam pa uVision.
Že vnaprej hvala za pomoč. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.50
|
Objavljeno: Čet Mar 05, 2009 11:46 pm Naslov sporočila: |
|
|
Napaka v compilerju ali napaka v programu ? Ne moreta biti obe hkrati na istem mestu, torej ti pises preko meja ene in s tem posegas v prsotor, kjer je druga (po svoji krivdi ali zaradi prevajalnika) ali pa sam sris po drugi in se tega niti ne zavedas.
Lokalne spremenljivke se praviloma vsakic znova ob klicu funkcije alocirajo na heapu. Preveri naslova obeh spremenljivk (za lokalno ob vsakem klicu funkcije), da bos videl zakaj - ce sploh - pride do prekrivanja. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
RokO Član

Pridružen-a: Čet 23 Nov 2006 11:14 Prispevkov: 120 Aktiv.: 0.53 Kraj: Kranj
|
Objavljeno: Pet Mar 06, 2009 1:00 am Naslov sporočila: |
|
|
Hehe, včasih je dovolj samo to, da ti kdo napiše, kar že sam veš - mislim namreč na to da sem šel sam parkrat čez kodo, pa nisem opazil da vmes "sam" spremenim buffer[].
Hvala za pomoč.
Me pa na splošno zanima kako je s spremenljivkami- koliko (in kako velike) jih imaš v lahko programu? - ali je to odvisno od količine RAMa? -ali od česa drugega? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.50
|
Objavljeno: Pet Mar 06, 2009 1:17 am Naslov sporočila: |
|
|
Vsekakor je odvisno od kolicine RAMa (vec ne mores stlaciti noter, kot je prostora). Ponavadi se prevajalnik in linker zavedata omejitev in pojamrata, ce bi prostora zmanjkalo. Ce sta nastavljena prevec konzervativno, potem ni vec omejitev fizicno razpolozljiva kolicina pomnilnika, ampak ta nastavitev, s tem da moras upostevati tudi da gre nekaj prostora za stack (in da lahko pride do tega, da stack ali heap pretirano narasteta in en pregazi drugega), torej da ni cisto vse samo tebi na voljo. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
RokO Član

Pridružen-a: Čet 23 Nov 2006 11:14 Prispevkov: 120 Aktiv.: 0.53 Kraj: Kranj
|
Objavljeno: Pet Mar 06, 2009 10:05 am Naslov sporočila: |
|
|
OK, hvala.
Z zgornjim odgovorom mi je stvar postala toliko jasna, da sem kmalu našel to TOLE temo, ki mi je še dodatno razčistila pojme.
Upam, da pomaga še komu. |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Pet Mar 06, 2009 7:08 pm Naslov sporočila: |
|
|
Sokrat je napisal/a: |
Lokalne spremenljivke se praviloma vsakic znova ob klicu funkcije alocirajo na heapu. |
Verjetno si mislil napisat na stacku. _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.50
|
Objavljeno: Pet Mar 06, 2009 7:11 pm Naslov sporočila: |
|
|
domen_puncer je napisal/a: |
Sokrat je napisal/a: |
Lokalne spremenljivke se praviloma vsakic znova ob klicu funkcije alocirajo na heapu. |
Verjetno si mislil napisat na stacku. |
Drzi. Na heapu se alocira prostor rocno (malloc itd.). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 10 dni
Powered by phpBB © 2001, 2005 phpBB Group
|