Std::array<std::array<double,300>,300> stack overflow . Miért?
Tegyük fel, hogy a double mérete 8 byte. Te lefoglalsz 300*300*8 byte-ot, ami nagyobb probléma, hogy mindezt a stacken teszed. Memóriablokkot nagyokat is lehet foglalni, de az std::array nem végez dinamikus allokációt, az pontosan ott van, ahova létrehoztad (ellentétben pl a vectorral, ami csak egy pointert tartalmaz a foglalt memóriaterületére).
Bár 720k-nak nem kéne soknak lennie, de valószínűleg mással is megpakoltad már a stacket.
Több megoldás is van.
1) Miért fontos, hogy állandó méretűt szeretnél? Valószínűleg nem fontos, és egy szimple vector<array<double, 300>> is megoldja a problémát szépen. Javaslom a reserve függvény megtekintését.
2) Ha mindenképp ragaszkodsz ehhez, allokáld dinamikusan:
typedef std::array<std::array<double,300>,300> MyArray;
std::unique_ptr<MyArray> array(new MyArray);
Ó ezer köszi a válaszokat!
Annyira nem létfontosságú a stabil méret. A kóddal akartam spórolni és a saját vektor meg mátrix osztályaimat származtattam le az std::array-ból. Először vector-ból származtattam, de elég rondán nézett ki, hogy el kellett fedni egy csomó függvényt. Array-al szebb volt, de ott meg assignment-nél kifagyott.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!