Stack Overflow! on jo tullut tutuksi. Osaan varata taulukoille muistia "calloc" funktiolla, ja luulin selvinneeni tästä pinon-ylittymis-bugista. Nyt bugi palasi, enkä keksi muuta selitystä kuin, että tekemieni funktioiden toiminta vaatii enemmän muistia kuin pinosta löytyy. Miten funktioiden käyttämä muisti varataan niille erikseen?
P.S. En ole ihan guru, mutta eikö itse funktiokin vaadi muistia. Siis ei pelkästään sen muuttujat?
Siis mitä tarkoitat funktion muistin vaatimisella? Funktion muuttujat varataan joka tapauksessa pinosta.
Olisiko mahdollista nähdä koodia tai jotain.. vaikea uskoa että funktiosi "vaativat enemmän muistia kun pinosta löytyy". Eikös pino myös kasva tarvittaessa?
Pino ei kasva tarvittaessa. Juuri sen takia Stack Overflow! virhe joskus tuleekin.
Mulla on funktioita, jotka kutsuvat funktioita, ja sitten ne taas kutsuvat muita funktioita. Kun ohjelma sitten kaatui näitä funktioita kutsuttaessa, muutin funktioiden muuttujat globaaleiksi, ja ajattelin, että nyt funktioiden tarvitsema muisti on valmiiksi varattuna.
Ohjelma ei kuitenkaan kaatunut alussa, kun globaaleiksi tehdyille muuttujille varattiin muistia, vaan vasta sitten kun funktioita kutsuttiin.
En keksi muuta selitystä, kuin että funktioiden toiminta siinä muistia tarvitsee. (Funktiot eivät muuten ole päättymättömässä luupissa muita funktioita kutsuessaa. Se on tarkistettu.)
Vaikea on edelleenkään mitään sanoa, koodia olisi mukava nähdä. Jostain muistan lukeneeni että Wintoosa kasvattaa pinoa tarvittaessa.. ja vaikka ei kasvattaisikaan, niin en usko että rajan pitäisi ihan heti vastaan tulla.. silloin on ehkä jo jossain muualla vikaa.
Ympäristöstä voisi mainita jotain jne, missä tuo "Stack Overflow!" virhe siis tuleekaan?
Kyseinen koodi (omaksi häpeäkseni) on aika epäselvää, ja niin iso ettei sitä voi täällä oikein näytellä.
Mutta hei, lipsutaanpa vähän aiheesta. Olen käyttänyt vain "struct":eja, käsittääkseni "class":it toimivat samalla tavoin, mutta niiden alla voi olla funktioita. Miten se käytännössä tapahtuu? Epäilisin, että se voisi ratkaista ongelmani. Jos funktiot sisältävälle classille sitten varaisi muistia erikseen.
Voithan toki vaikka mailata sen koodisi minulle ;-)
C++:ssa structit käsitellään classeina, eli siinä mielessä ne toimivat samalla tavalla.. vieläkin uskoisin että ratkaisu voisi löytyä jostain muualta..
Et muuten vieläkään kertonut ympäristöäsi :)
Windows 95, ja (ilmeisesti DOSsille tarkoitettu) Watcom C++. Usko vaan, ei sitä koodia kannata katsoa. Se on armottoman sotkuinen, jaettu useisiin tiedostoihin, ja vaatii vielä muutaman muun tiedoston, että sen voisi ajaa.
Ajattelin, että tohon funktion käyttämän muistin asettamiseen olisi selvä menetelmä (josta joku tietäisi). Jos ei ole, niin rupean kokeilemaan eri juttuja. Aluksi vaikka niiden funktioiden pistämistä classiin.
Hei Fawkz, kyselin vähän ohjelmien toiminnasta. Noissa jutuissani funktion tarvitsemasta muistista ei sitten välttämättä ollut mitään perää.
Se on sekavaa koodia ja jossain on jotain vikaa. Unohda vaan koko juttu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.