www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

[C] Problem s spremenljivkami

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
RokO
Član
Član



Pridružen-a: Čet 23 Nov 2006 11:14
Prispevkov: 120
Aktiv.: 0.53
Kraj: Kranj

PrispevekObjavljeno: Čet Mar 05, 2009 11:15 pm    Naslov sporočila:  [C] Problem s spremenljivkami Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.50

PrispevekObjavljeno: Čet Mar 05, 2009 11:46 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RokO
Član
Član



Pridružen-a: Čet 23 Nov 2006 11:14
Prispevkov: 120
Aktiv.: 0.53
Kraj: Kranj

PrispevekObjavljeno: Pet Mar 06, 2009 1:00 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.50

PrispevekObjavljeno: Pet Mar 06, 2009 1:17 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RokO
Član
Član



Pridružen-a: Čet 23 Nov 2006 11:14
Prispevkov: 120
Aktiv.: 0.53
Kraj: Kranj

PrispevekObjavljeno: Pet Mar 06, 2009 10:05 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
domen_puncer
Član
Član



Pridružen-a: Čet 01 Maj 2008 13:30
Prispevkov: 78
Aktiv.: 0.37
Kraj: Ljubljana, Mozirje

PrispevekObjavljeno: Pet Mar 06, 2009 7:08 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.50

PrispevekObjavljeno: Pet Mar 06, 2009 7:11 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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