Когда я вызываю конструктор для моей структуры SegTree в приведенном ниже коде, я продолжаю получать ненулевой код завершения. Когда я закомментирую строку, которая инициализирует структуру, программа запускается без проблем. Может кто-нибудь объяснить, почему это происходит и как исправить мой код?
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string>
#include <vector>
#include <string.h>
using namespace std;
struct SegTree{
int N;
long long tree [1<<20], arr [1<<20];
SegTree(int x){ N = x; }
};
int main(){
SegTree st(len);
return 0;
}
Пожалуйста, помогите, и спасибо заранее!
РЕДАКТИРОВАТЬ: Моя проблема не в размере массивов, как я уже упоминал в комментариях. Я могу создавать массивы и запускать код, когда они размещены вне структуры.
Вот это да. Это большой состав:
struct SegTree{
int N;
long long tree [1<<20], arr [1<<20];
1<<20
это 1 мег. long long
обычно составляет 8 байт, поэтому ваша структура составляет 16 мегабайт … и вы размещаете ее в стеке. Как правило, программы выделяют 1 Мбайт для стека … так что он не подходит!
Решение состоит в том, чтобы преобразовать массивы в векторы. Массив будет размещен в куче, и все будет в порядке:
std::vector<long long> tree = {1<<20};
std::vector<long long> arr = {1<<20};
(как только вы используете векторы, вы, вероятно, сможете сделать гораздо лучше, чем выделять память все сразу при некотором максимальном размере в конструкторе).
Других решений пока нет …