Ошибка памяти при иниц. двумерного массива

Xipxop

делаю программу, вычитающие коды Хэмминга(цикл.).Встретился с одной непонятной мне проблеме: При Инициализации двухмерного массива(int aaa[999][999]) у меня вылетает критическая ошибка, которая говорит, что
неизвестное значение this
Необработанное исключение типа "System.StackOverflowException" произошло в CyclingCode.exe
Вот код:
Кликните здесь для просмотра всего текста
/*void perevernyt_massiv(int mas[][999], int nowMas, int *MaxMas, int nowMaxMas)
    {
        int i,j;
        for (i=0,j=MaxMas[nowMaxMas]-1;i<j;i++,j--) 
        { 
            swap(mas[nowMas][i],mas[nowMas][j]);
        }
    }
 
    void pisat_massiv(int mas[][999], int nowMas, int *MaxMas, int nowMaxMas)
    {
        for(int i=0;i<MaxMas[nowMaxMas];i++)
        {
            DebugBox->Text+=mas[nowMas][i].ToString();
        }
        DebugBox->Text+="\n";
    }
 
    void transform_massiv(int mas[][999], int nowMas, int *MaxMas, int nowMaxMas)
    {
        for(int i=0;i<MaxMas[nowMaxMas];i++)
        {
            mas[nowMas][i]=mas[nowMas][i]*i;
        }
    }
 
    void sortirovka(int mas[][999], int nowMas, int *MaxMas, int nowMaxMas)
    {
        for(int i=0;i<MaxMas[nowMaxMas];i++)
            for(int b=0;b<MaxMas[nowMaxMas];b++)
                if(mas[nowMas][i]>mas[nowMas][b])
                    swap(mas[nowMas][i],mas[nowMas][b]);
    }
 
    void nova_dlina(int mas[][999], int nowMas, int *MaxMas, int nowMaxMas)
    {
        int a=MaxMas[nowMaxMas];
        MaxMas[nowMaxMas]=0;
        for(int i=0;i<a;i++)
        {
            if(mas[nowMas][i]!=0)
            {MaxMas[nowMaxMas]++;}
        }
        MaxMas[nowMaxMas]++;
    }*/
    
    void scet_coda()
    {
        int MaxArrCode[999];
        int Code1[999][999];
        /*int DopCode[2][999];
        int NowCode=0;
        int MaxArrDopCode[2]={0};
        //---------------------
        DebugBox->Text=L"";
        textBox3->Text=L"";
        //---------------------
        MaxArrCode[0]=textBox1->Text->Length;
        MaxArrDopCode[0]=textBox2->Text->Length;
        array<Char>^Tbox1;  Tbox1=textBox1->Text->ToCharArray(0,MaxArrCode[0]);
        array<Char>^Tbox2;  Tbox2=textBox2->Text->ToCharArray(0,MaxArrDopCode[0]);
        
        DebugBox->Text+="Размер Кода1="+MaxArrCode[0].ToString()+"\n";
        DebugBox->Text+="Размер Кода2="+MaxArrDopCode[0].ToString()+"\n";
 
        for(int i=0;i<MaxArrCode[0];i++){Code1[0][i]=int(Tbox1[i])-48;}
        DebugBox->Text+="Полученый массив1=";  pisat_massiv(Code1,0, MaxArrCode,0);
        for(int i=0;i<MaxArrDopCode[0];i++){DopCode[0][i]=int(Tbox2[i])-48;}
        DebugBox->Text+="Полученый массив2=";  pisat_massiv(DopCode,0, MaxArrDopCode,0);
        //------
        perevernyt_massiv(Code1,0, MaxArrCode,0);
        DebugBox->Text+="Полученый перевернутый массив1="; pisat_massiv(Code1,0, MaxArrCode,0);
        perevernyt_massiv(DopCode,0, MaxArrDopCode,0);
        DebugBox->Text+="Полученый перевернутый массив2="; pisat_massiv(DopCode,0, MaxArrDopCode,0);
        //------
        transform_massiv(Code1,0, MaxArrCode,0);
        DebugBox->Text+="Получаем числа1="; pisat_massiv(Code1,0, MaxArrCode,0);
        transform_massiv(DopCode,0, MaxArrDopCode,0);
        DebugBox->Text+="Получаем числа2="; pisat_massiv(DopCode,0, MaxArrDopCode,0);
        //------
        sortirovka(Code1,0, MaxArrCode,0);
        DebugBox->Text+="Сортировка1="; pisat_massiv(Code1,0, MaxArrCode,0);
        sortirovka(DopCode,0, MaxArrDopCode,0);
        DebugBox->Text+="Сортировка2="; pisat_massiv(DopCode,0, MaxArrDopCode,0);
        //------
        nova_dlina(Code1,0, MaxArrCode,0);      DebugBox->Text+="Размер Кода1="+MaxArrCode[0].ToString()+"\n";
        nova_dlina(DopCode,0, MaxArrDopCode,0); DebugBox->Text+="Размер Кода2="+MaxArrDopCode[0].ToString()+"\n";
        //------
        DebugBox->Text+="Теперь код1 Виден так="; pisat_massiv(Code1,0, MaxArrCode,0);
        DebugBox->Text+="Теперь код2 Виден так="; pisat_massiv(DopCode,0, MaxArrDopCode,0);
        //------
        if(Code1[NowCode][0]>DopCode[0][0])
        {
            DopCode[1][MaxArrDopCode[1]]=Code1[NowCode][0]-DopCode[0][0];
        }*/
    }
 
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 if(textBox1->Text!="" && textBox2->Text!="")
                 {
                    scet_coda();
                 }
             }
Пометка к коду: 1)Это часть кода из Windows Forms(Название проекта в VS2008). 2)Даже заккоментировав почти весь код, запуская функцию(нажимая на кнопку Button1) он ругается на их инициализацию 3)Textbox 1 и 2- их значения ввиде Двоичного кода(1 и 0)
7 ответов

Xipxop

Xipxop, на лицо переполнение стека. Либо увеличь размер стека, либо память под массив выделяй динамически.


Xipxop

Xipxop, в release должно нормально отработать.


Xipxop

Переполнения массива у меня в принципе не может быть: Длина TextBox у меня не превышает 10(больше не вводил), что значит я использую a[10] массивов, несчитая первый. (вот примерный максимум: a[10][10])UnsKneD, Release это что? Такой функции нету...?(или необ этом)


Xipxop

Переполнения массива
Я говорил про стек.


Xipxop

Xipxop, я про сборку, сейчас вы собираете проект в Debug, если собрать в Release стек не переполнится.


Xipxop

Оба варианта Release и Debug показывают одно и тоже.(А должны отличатся? 0_о)Я не понимаю насчет стека Я работаю с массивами, причем тут конструкция стек? Я же её не вызываю!(в моем понимании стек это что-то подобии функции)Решил проблему так:
int **Code1=new int*[999]; for (int i=0; i<999; i++) Code1[i] = new int[999];
int **DopCode=new int*[999]; for (int i=0; i<2; i++) DopCode[i] = new int[2];
Теперь вопрос правильно ли? Т.Е. Теперь переменная: Code1[999][999] И теперь: DopCode[2][999] ????????????


Xipxop

Xipxop, когда ты создавал статический массив, то память под него выделялась в стеке, размер которого ограничен. Когда ты память выделяешь через оператор new, то память выделяется уже не стеке, а в куче, размер которой ограничен свободной памятью.