c++ túl nagy tömb

Fórumok

string tomb [350000][6];

hogy lehet megoldani, hogy ne dobjon szegmenshibát? akár még nagyobb számra? köszi

Hozzászólások

Miert akarsz ilyen hulyeseget csinalni?
Amugy globalis valtozokent nekem mukodott, csak lokaliskent nem. Ami azt jelenti, hogy a stack-en nem szeretne ekkora tombot foglalni - ami teljesseggel ertheto. Szoval az adatszegmensben elfer, de teheted heap-re is.

Amugy mire jo ez az egesz? Ha tenyleg erre van szukseged, akkor ott valamit nagyon elszurtal. Ha nem kell fixen ekkora tomb, akkor ott vannak a C++-os vector, map, hashed_map, meg hasonlo template-ek. Ha adatbazisra van szukseged, akkor szinten rossz uton jarsz.

Ha biztos vagy benne, hogy ez kell neked, akkor add meg a forditonak valahogy, hogy nagyobb stack-re van szukseged. Bar ezt ketlem.

--
"ne támogasd az erdők kiírtását mozijeggyel, töltsd le a netről!" - killllll, asva.info


#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char* argv[])
{
   vector< vector<string> > tomb(350000, vector<string>(6,"xxx"));

   //Ciklussal
   int i, j;
   for(i=0; i < 350000; ++i)
   {
      for(j=0; j < 6; ++j)
      {
         cout << tomb[i][j] << endl;
      }
   }

   //Iteratorokkal (ha modositod a tombelemeket, akkor a "const_"
   //nem kell)
   vector< vector<string> >::const_iterator iter_i; //kulso
   vector<string>::const_iterator           iter_j; //belso

   for(iter_i = tomb.begin(); iter_i != tomb.end(); iter_i++)
   {
      for(iter_j = (*iter_i).begin(); iter_j != (*iter_i).end(); iter_j++)
      {
         cout << *iter_j << endl;
      }
   }
   
   return 0;
}

Előnye, hogy dinamikusan méretezhető és csomó STL függvény van hozzá,
ami megkönnyítheti az ember életét.

--
A gyors gondolat többet ér, mint a gyors mozdulat.

Ahogy az elottem szolok mar leirtak, ez egy nagyon rossz programozasi megkozelites, hogy ilyen nagy meretu tombot a stack-re pakolsz. En is inkabb a heap hasznalatat javaslom dinamikus memoriafoglalassal vagy egy statikus valtozo bevezetesevel.

Ha mindenkeppen a jelenlegi megoldast akarod tovabbvinni, akkor a gcc linkerenek a --stack kapcsolojaval beallithatod, hogy mekkora stack-et hasznaljon a program.

Mi lesz, ez szótárprogram? Én dinamikus helyfoglalással hoznék létre egy ekkora tömböt, kétlem hogy mindíg full tele lenne 350000 db stringgel.

Csatlakoznek az elottem szolokhoz, erre nem valo a stack (lokalis valtozo fvben). Megoldas a heap (new/delete) ill. az adatszegmens (globalis, statikus valtozo).

Alternativa meg a hianyos matrix megkozelites, ahol minden oszlopot es sort egy lancolt listaval abrazolsz igy a nem letezo elemekre nem kell referenciat eletben tartani. (350000*6 elem helyett 350000+6+n referenciat tarolsz n letezo elem eseten).

--
The Net is indeed vast and infinite...
http://gablog.eu

köszi, végülis dinamikus cucc lett benne