Zdravím,
zjednodušene mám problém s čítaním matíc z textového súboru v formáte:
pocet_riadkov pocet_stlpcov
prvky v prvom riadku
prvky v druhom riadku
....
prvky v poslednom riadku
Používam takýto kód:
vstup.getline(retazec,50,' ');
ss = new stringstream;
*ss >> c //c je double ktory je potom priradeny prislusnemu prvku v matici. Prvu maticu to takto cita bez problemov. Keď sa snaží čítať druhú zhavaruje na ss = new stringstream. Chybova hlaska je malloc(): memeory corruption (fast) alebo segmentation fault. To zavisi od uplne nepodstatnych riadkov.
Vie mi prosim niekto poradit v com by mohla byt chyba?
Vdaka

hod sme cely kod,v pondelok by som sa na to mrkol
Diki moc, v prilohe je cely kod. Ta cast, ktora mi nefunguje je v casti "citanie vstupu" v neutron.cpp. Prikladam aj vzorovy vstup pre program.
Moc som sa tomu nevenoval, ber to skor ako inspiraciu co si skontrolovat:
diff -u a/domain.h b/domain.h --- a/domain.h 2014-12-09 02:16:11.000000000 +0100 +++ b/domain.h 2014-12-09 02:13:45.000000000 +0100 @@ -52,7 +52,7 @@ }; int domain::loc(int x, int y, int z){ - return ((z-1)*size_x*size_y+(y-1)*size_x+x); + return ((z-1)*size_y+(y-1)*size_x+x-1); }; int domain::pos_x(int q){ @@ -92,13 +92,13 @@ }; void domain::setValue (int x, int y, int z, double v){ - int k=(z-1)*size_x*size_y+(y-1)*size_x+x; + int k=(z-1)*size_y+(y-1)*size_x+x-1; vertex[this->loc(x,y,z)]=v; }; void domain::evolve(double d, double c){ std::cout << "d=" << d << std::endl; - for (int i;i<=this->size();i++){ + for (int i=0;i<thissize();i++){ vertex[i]+=d*vertex[i]+c; }; }; diff -u a/neutron.cpp b/neutron.cpp --- a/neutron.cpp 2014-12-09 02:16:10.000000000 +0100 +++ b/neutron.cpp 2014-12-09 02:18:18.000000000 +0100 @@ -80,9 +80,9 @@ *** citanie vstupu *** ******************************************/ -int a=10 +int a=10; int x,y,z,n=0,m=0; -int n_domain=0,m_interact=0; +int n_domain=100,m_interact=100; int nsteps=10; int out_domains=0; double d=0,co,r,c; @@ -90,8 +90,8 @@ char type[50]; char * cislo = new char [50]; -domain ** pole; -interaction ** vztah; +domain ** pole = new domain * [n_domain]; +interaction ** vztah = new interaction * [m_interact]; char * prikaz = new char [50]; stringstream * ss; @@ -107,8 +107,6 @@ cout << "Starting program" << endl; cout << "number of domains is "<< n_domain <<" number of interactions is "<< m_interact << endl; - pole = new domain * [n_domain]; - vztah = new interaction * [m_interact]; } else if (compargs(prikaz,"steps")) { vstup >> nsteps; } else if (compargs(prikaz,"domain")) {Inak nie je to dobre napisane (mix c a c++). Skus namiesto poli pouzit std::vector, std::string, pole a vztah nema delete atd.
Opravene:
http://pastebin.com/y1StdzmP
Oznac odpoved za vyriesenu a posli mi bagetu ;)
Diki moc :-)
Neviem ako toto označiť ako vyriešené, neviem či to ako hosť vôbec možem. Ak nie, poprosil by som admina/moderátora/kohokoľvek aby tak učinil.
Nie, musíš byt registrovaný.