Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Xipxop
 Аватар для Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 150
05.05.2013, 20:06     Ошибка памяти при иниц. двумерного массива #1
делаю программу, вычитающие коды Хэмминга(цикл.).

Встретился с одной непонятной мне проблеме:
При Инициализации двухмерного массива(int aaa[999][999]) у меня вылетает критическая ошибка, которая говорит, что
неизвестное значение this
Необработанное исключение типа "System.StackOverflowException" произошло в CyclingCode.exe


Вот код:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*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)


Не по теме:

Знаю, что несовсем в ту тему, но ошибка думаю пустяковая... Для этой части форума

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
05.05.2013, 20:36     Ошибка памяти при иниц. двумерного массива #2
Xipxop, на лицо переполнение стека. Либо увеличь размер стека, либо память под массив выделяй динамически.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
05.05.2013, 20:41     Ошибка памяти при иниц. двумерного массива #3
Xipxop, в release должно нормально отработать.
Xipxop
 Аватар для Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 150
05.05.2013, 20:54  [ТС]     Ошибка памяти при иниц. двумерного массива #4
Переполнения массива у меня в принципе не может быть:
Длина TextBox у меня не превышает 10(больше не вводил), что значит я использую a[10] массивов, несчитая первый. (вот примерный максимум: a[10][10])


UnsKneD, Release это что? Такой функции нету...?(или необ этом)
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
05.05.2013, 20:56     Ошибка памяти при иниц. двумерного массива #5
Цитата Сообщение от Xipxop Посмотреть сообщение
Переполнения массива
Я говорил про стек.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
05.05.2013, 21:00     Ошибка памяти при иниц. двумерного массива #6
Xipxop, я про сборку, сейчас вы собираете проект в Debug, если собрать в Release стек не переполнится.
Xipxop
 Аватар для Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 150
05.05.2013, 21:12  [ТС]     Ошибка памяти при иниц. двумерного массива #7
Оба варианта Release и Debug показывают одно и тоже.(А должны отличатся? 0_о)

Я не понимаю насчет стека
Я работаю с массивами, причем тут конструкция стек? Я же её не вызываю!(в моем понимании стек это что-то подобии функции)

Добавлено через 6 минут
Решил проблему так:
C++
1
2
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]
????????????
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2013, 21:20     Ошибка памяти при иниц. двумерного массива
Еще ссылки по теме:

Ошибка при динамическом выделении двумерного массива char C++
Ошибка при перегрузке инкремента для двумерного массива C++
C++ Ошибка выделения памяти для двумерного массива

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
05.05.2013, 21:20     Ошибка памяти при иниц. двумерного массива #8
Xipxop, когда ты создавал статический массив, то память под него выделялась в стеке, размер которого ограничен. Когда ты память выделяешь через оператор new, то память выделяется уже не стеке, а в куче, размер которой ограничен свободной памятью.
Yandex
Объявления
05.05.2013, 21:20     Ошибка памяти при иниц. двумерного массива
Ответ Создать тему
Опции темы

Текущее время: 00:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru