Codeblocks Ошибка при запуске программы 0xc00000fd

243
22 июля 2017, 07:35

Написал трехмерное дерево фенвика на c++, запускаю прогу, она вылетает с кодом ошибки 0xc00000fd, вот код:

#include <bits/stdc++.h>
using namespace std;
#define MAXN 210
long long n,x1,y_1,z1,x2,y2,z2,q,k,a[MAXN][MAXN][MAXN],oper;
struct Fenwick
{
    long long t[MAXN][MAXN][MAXN];
    void buildT()
    {
        for(int i=1; i<=MAXN; i++)
            for(int j=1; j<=MAXN; j++)
                for(int u=1; u<=MAXN; u++)
                    t[i][j][u]=1;
    }
    void add(long long x,long long y,long long z,long long value)
    {
        x++;
        y++;
        z++;
        a[x][y][z]+=value;
        for(long long i=x; i<MAXN; i+=(i & -i))
            for(long long j=y; j<MAXN; j+=(j & -j))
                for(long long u=z; u<MAXN; u+=(u & -u))
                    t[i][j][u]+=value;
    }
    long long sumpref3d(long long x,long long y,long long z)
    {
        x++;
        y++;
        z++;
        long long sum=0;
        for(long long i=x; i>0; i-=(i & -i))
            for(long long j=y; j>0; j-=(j & -j))
                for(long long u=z; u>0; u-=(u & -u))
                    sum+=t[i][j][u];
        return sum;
    }
    long long sumpara(long long x1,long long y1,long long z1,long long x2,long long y2,long long z2)
    {
        return sumpref3d(x1,y1,z1)-
               sumpref3d(x1,y1,z2-1)-
               sumpref3d(x1,y2-1,z1)-
               sumpref3d(x2-1,y1,z1)+
               sumpref3d(x1,y2-1,x2-1)+
               sumpref3d(x2-1,y1,z2-1)+
               sumpref3d(x2-1,y2-1,z1)-
               sumpref3d(x2-1,y2-1,z2-1);
    }
    void changeValue(long long x,long long y,long long z,long long k)
    {
        add(x,y,z,k);
    }
};
int main()
{
    Fenwick fenwick;
    fenwick.buildT();
    scanf("%lld",&n);
    while(true)
    {
        scanf("%lld ", &oper);
        if(oper==3)break;
        else if(oper==1)
        {
            scanf("%lld %lld %lld %lld\n",&x1,&y_1,&z1,&k);
            fenwick.changeValue(x1,y_1,z1,k);
        }
        else if(oper==2)
        {
            scanf("%lld %lld %lld %lld %lld %lld\n",&x1,&y_1,&z1,&x2,&y2,&z2);
            printf("%lld\n",fenwick.sumpara(x1,y_1,z1,x2,y2,z2));
        }
    }

}
Answer 1

Вряд ли у вас такой большой стек, что в состоянии выдержать массив из 9261000 элементов по 8 байт - итого более 70 мегабайт...

Выделяйте такие большие массивы динамически.

Кроме того, вы забываете, что массивы индексируются, начиная с нуля, и выбираетесь за их границы - например, тут:

for(int i=1; i<=MAXN; i++)
    for(int j=1; j<=MAXN; j++)
        for(int u=1; u<=MAXN; u++)
            t[i][j][u]=1;

Далее на корректность кода не смотрел.

READ ALSO
Передача класса в функцию в c++

Передача класса в функцию в c++

Как нужно передать класс в функцию someFunction(Example), чтоб при её вызове элемент mgrid[3][3] изменился?

145
Определить в Jquery (Обработчик событии) когда создается scrolling прокрутка

Определить в Jquery (Обработчик событии) когда создается scrolling прокрутка

Есть обработчик onscrollСобытие onscroll происходит, когда элемент прокручивается

257