C++ stringstream

Sekcia: Programovanie 05.12.2014 | 17:20
Pali   Návštevník

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

    • RE: C++ stringstream 06.12.2014 | 21:13
      Avatar miiisa   Návštevník

      hod sme cely kod,v pondelok by som sa na to mrkol

      • RE: C++ stringstream 08.12.2014 | 09:27
        Avatar Pali   Návštevník

        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.

        • RE: C++ stringstream 09.12.2014 | 02:25
          Avatar miso   Návštevník

          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.

        • RE: C++ stringstream 09.12.2014 | 16:01
          Avatar Tommy Angelo   Používateľ

          Opravene:

          http://pastebin.com/y1StdzmP

          Oznac odpoved za vyriesenu a posli mi bagetu ;)

          • RE: C++ stringstream 10.12.2014 | 10:29
            Avatar Pali   Návštevník

            Diki moc :-)

    • RE: C++ stringstream 10.12.2014 | 10:53
      Avatar Pali   Návštevník

      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.

      • RE: C++ stringstream 10.12.2014 | 10:55
        Avatar Andrej Lacho Debian, CentOS ...  Administrátor

        Nie, musíš byt registrovaný.