Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Suuri taulukko kaataa ohjelman

Achernar [01.10.2012 19:04:24]

#

Kirjoitin vuosi takaperin C++:lla ohjelman joka ratkaisee numeerisesti Ginzburg-Landaun osittaisdifferentiaaliyhtälöryhmän helium-3-supranesteelle 2 ulottuvuudessa. Ongelmana oli se, että koneeni (prossu Core i3, käyttis win7) kaatui joka kerta kun ajoin kirjoittamaani ohjelmaa enemmän kuin suunnilleen 10 000 laskentapisteellä eli 100x100-kokoisella alueella.

Silloin aikanaan se ei haitannut koska saatoin tehdä laskuni kyllin pienellä alueella. Nyt haluaisin kuitenkin laajentaa ohjelmani 3 ulottuvuuteen ja suurempaan resoluutioon. Sitä varten tarvitsisin paljon lisää laskentapisteitä, vähintään ehkäpä 200x200x200 kokoisen kuution verran.

Kertokaapas kokeneemmat missä vika kun kone kaatuu? Tarvinko uuden koneen, käyttiksen, molemmat vai jotain muuta?

Metabolix [01.10.2012 19:14:17]

#

Tuosta selityksestä on ihan mahdotonta päätellä, missä vika olisi. Jumittuuko ohjelma, sammuuko ohjelma, jumittuuko Windows, sammuuko Windows, tilttaako koko tietokone? Tapahtuuko tämä heti ohjelman alussa, melko pian sen jälkeen vai vasta pidemmän laskennan päätteeksi?

Jos ohjelma kaatuu heti alkuun, yksi mahdollinen syy on, että olet yrittänyt tallentaa tietoa funktion sisällä määriteltyyn taulukkoon, jolloin taulukon koolla on teknisistä syistä melko matala yläraja. Jos vika on tässä, voit ratkaista ongelman käyttämällä globaalia taulukkoa tai varaamalla muistin new-operaattorilla.

Achernar [01.10.2012 19:48:11]

#

Hmm, olen tosiaan määritellyt taulukot vasta main-funktion sisällä. Täytyypä kokeilla globaaleilla taulukoilla.

User137 [01.10.2012 21:59:54]

#

Ohjelman kaatuminen johtuu melkein joka ainut kerta ohjelmoijan itse tekemästä virheestä. Saatat yrittää lukea tai kirjoittaa taulukon alueen ulkopuolelle.

Millä käskyllä varaat taulukon?

Achernar [04.10.2012 13:09:11]

#

Taulukoiden muuttaminen globaaleiksi ratkaisi ongelman. Kiitos tästä Metabolixille!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta