Конструктор структуры в C ++ вызывает ненулевой код выхода

Когда я вызываю конструктор для моей структуры 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;
}

Пожалуйста, помогите, и спасибо заранее!

РЕДАКТИРОВАТЬ: Моя проблема не в размере массивов, как я уже упоминал в комментариях. Я могу создавать массивы и запускать код, когда они размещены вне структуры.

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};

(как только вы используете векторы, вы, вероятно, сможете сделать гораздо лучше, чем выделять память все сразу при некотором максимальном размере в конструкторе).

7

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector