Я делаю школьное задание, касающееся Structs в C ++. Назначение не позволяет использовать STL или new
/ delete
.
Я представляю предметы в журнале.
struct PLACE {
int itemCount;
int etiquette[2];
};
struct SHELF {
int placesCount;
PLACE places[128];
};
struct RACK {
int shelvesCount;
SHELF shelves[128];
};
struct MAG {
int racksCount;
RACK racks[5];
};
Теперь, когда я запускаю следующий код, он работает нормально, но если я изменяю длину массива стоек на что-то вроде 20, я получаю ошибку времени выполнения (code.exe перестал работать).
PLACE place1 = {1, {1,2}};
SHELF shelf1 = {2, {place1}};
RACK rack1 = {3, {shelf1}};
MAG mag1 = {1, {rack1}};
Кажется, что я превышаю какую-то память? Я бы подумал, что это маловероятно, поскольку, когда я рассчитал его (когда длина стойки равна 5), я использую только (((12 * 128) + 4) * 128 + 4) * 5 + 4 байта, что составляет около 1 МБ.
EDIT:
Я попросил своего инструктора дать разъяснения по этому вопросу. Он сказал мне, что возможно, что моя куча превышена, а не стек , потому что: (цитата)
Стеки имеют дело с вызовами функций, и превышение стека может быть вызвано
например, рекурсия, в то время как здесь мы имеем дело с большими данными, так
скорее превышение кучи.
Он также сказал мне, что вполне возможно, что мой компьютер просто имеет нижний предел (около 4 МБ), в то время как серверу, на котором проверяется наш код, выделено 1 ГБ для обработки такого большого количества данных.
Не знаю, правда ли это, потому что из того, что я читаю онлайн, и стеку, и куче можно назначать переменные, а стек не зарезервирован исключительно для вызовов функций, но также и для переменных внутри этих функций ...