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

SEHException при заполнении вектора - C++

Восстановить пароль Регистрация
 
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
08.08.2012, 14:57     SEHException при заполнении вектора #1
тут такое дело... если в кратце, есть вектор summa, заполняю его нулями и вылезает SEHException. Я так понимаю, ему не хватает памяти, или я выхожу куда то за пределы?
C++
1
2
3
4
5
vector <double> summa;
double MaxValue=78643199;
...
summa.clear();
summa.resize(MaxValue,0); //заполняю нулями
Неужели что то банальное и глупое?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 14:57     SEHException при заполнении вектора
Посмотрите здесь:

C++ Сообщение о ошибке при заполнении массива
Глюк при заполнении массива C++
Ошибка при заполнении C++
SEHException не обработано C++
C++ ошибка при заполнении массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.08.2012, 15:08     SEHException при заполнении вектора #2
Размер типа double чаще всего 8 байт. Вы своим summa.resize(MaxValue,0); где int(MaxValue) == 78643199 требуете себе выделить ~600 мегабайт памяти. Не думаю, что это слишком много.

Но, возможно, это ограничение самого vector, да. Попробуйте посмотреть, чему равно summa.max_size().
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
08.08.2012, 15:17  [ТС]     SEHException при заполнении вектора #3
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Попробуйте посмотреть, чему равно summa.max_size().
пишет вроде как 536 870 911
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.08.2012, 17:18     SEHException при заполнении вектора #4
У меня ваш код ошибки не вызывает. Может она в другом месте?
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
09.08.2012, 10:29  [ТС]     SEHException при заполнении вектора #5
Тогда скину весь быдлокод кнопки, на которую матерится. Если кому не лень, посмотрите)
надо ли описывать что я творю?
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
vector <double> mass_full(1000000);//массив который заполняется нулями с двух сторон
vector <double> mass_result;//массив для умножения
vector <double> summa;//массив для сложения
vector <double> mass_a(1000000);
 
...
 
private: System::Void button2_Click_1(System::Object^  sender, System::EventArgs^  e) {
        //КНОПКА РАСЧЕТ 2
 
            
             int z=0,j=0,k=0,h=0,g=0,//x=iter-5;
             full_length = iter*nom*3;  //длинна массива mass_full
             sum_length = iter*nom;
             MaxValue = full_length * sum_length - 1;
 
             int formula = (full_length * sum_length) - full_length;//размерность mass_result
             
 
             listBox2->Items->Clear();
             listBox4->Items->Clear();
             listBox5->Items->Clear();
             mass_result.clear();
             mass_full.clear();
             summa.clear();
            //заполняем начало массива нулями
             mass_full.resize(iter*nom,0);
            
             //заполняем середину массива суммами
             mass_full.insert(mass_full.end(),mass_sum.begin(),mass_sum.end());
 
              //заполняем конец массива нулями
             mass_full.insert(mass_full.end(),iter*nom,0);
            
             //Вывод MASS_FULL
             for (int i=0; i < full_length; i++)
             {
                listBox2->Items->Add("Шаг: " + i + " = " + Convert::ToString(mass_full[i]));
             }
 
             mass_result.resize(MaxValue);//изменяем размер результирующего массива
 
             //Заполнение MASS_RESULT
             for (z=0;z<full_length;z++)
             {
                 //try
                // {
 
                 if (j < sum_length)
                     mass_result[k] = mass_full[z] * mass_sum[j];
                 j++;
                 k++;
 
                 if  (j >= sum_length)
                 {
                     j = j-sum_length;
                     z = z-sum_length+1;
                 }
 
                // }
                 // catch(System::Runtime::InteropServices::SEHException e) //моя неудачная попытка поймать исключение
                 //{
 
                // }
             }
 
              listBox5->Items->Add("макс размер summa: " + Convert::ToString(summa.max_size()));
             //заполняем нулями SUMMA
             summa.resize(MaxValue,0);
              listBox5->Items->Add("размер summa: " + Convert::ToString(summa.size()));
             listBox5->Items->Add("выделена память summa: " + Convert::ToString(summa.capacity()));
 
             z=0;
 
             //заполняем SUMMA      
             for (h = 0;h<formula-sum_length;h+=sum_length)
             {
 
                 z=h;
                 for (int j=0;j<sum_length;j++)
                 {
 
                     mass_a[j]= mass_result[z];
                     summa[g] += mass_a[j];
                     z++;
                 }
                 g++;
 
                
             }
 
              //Вывод SUMMA 
             for (int i=0;i<g-sum_length+5;i++)
             {
                 listBox4->Items->Add("Шаг: " + i + " = " + Convert::ToString(summa[i]));
             }
 
//а дальше строится график
Добавлено через 12 минут
p.s. вылетает на 70 строке
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.08.2012, 11:15     SEHException при заполнении вектора #6
Этот код не проверить. Данных нет (iter, home и пр.). Непосредственно перед 70 строкой проверьте, чему равен MaxValue.
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
09.08.2012, 11:20  [ТС]     SEHException при заполнении вектора #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Непосредственно перед 70 строкой проверьте, чему равен MaxValue.
MaxValue как раз то и равно 78643199
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.08.2012, 11:30     SEHException при заполнении вектора #8
Цитата Сообщение от Tailor Посмотреть сообщение
MaxValue как раз то и равно 78643199
Перед 70 строкой проверяете? И как?

Добавлено через 4 минуты
C++
1
2
3
4
5
6
 
vector <double> summa;
double MaxValue=78643199;
...
summa.clear();
summa.resize(MaxValue,0); //заполняю нулями
Если отдельно это код где-нибудь набрать, ошибка есть? И строку вы как определяете, где вылет?
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
09.08.2012, 11:48  [ТС]     SEHException при заполнении вектора #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Перед 70 строкой проверяете? И как?
да перед 70
Цитата Сообщение от alsav22 Посмотреть сообщение
Если отдельно это код где-нибудь набрать, ошибка есть?
набрал в консоли, все нормально вроде (и нафига я привел рабочий код)
Цитата Сообщение от alsav22 Посмотреть сообщение
И строку вы как определяете, где вылет?
дебажу, в разных местах ставлю брик поинты
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.08.2012, 11:55     SEHException при заполнении вектора #10
Цитата Сообщение от Tailor Посмотреть сообщение
да перед 70
Как проверяете? cout << MaxValue; делаете?

Добавлено через 46 секунд
Среда какая?
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
09.08.2012, 11:58  [ТС]     SEHException при заполнении вектора #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Как проверяете? cout << MaxValue; делаете?
нет, дебажу

Цитата Сообщение от alsav22 Посмотреть сообщение
Среда какая?
MS VS 2010
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.08.2012, 11:59     SEHException при заполнении вектора #12
Цитата Сообщение от Tailor Посмотреть сообщение
набрал в консоли, все нормально вроде
Значит в целом коде, есть, в чём-то, отличие от куска. Если весь код выложите, тогда смогу проверить, а так трудно что-то определить.

Добавлено через 57 секунд
Цитата Сообщение от Tailor Посмотреть сообщение
нет, дебажу
Перед 70 сделайте cout << MaxValue;
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
09.08.2012, 12:03  [ТС]     SEHException при заполнении вектора #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Перед 70 сделайте cout << MaxValue;
вывожу в листбокс, значение всё тоже
Цитата Сообщение от alsav22 Посмотреть сообщение
Если весь код выложите, тогда смогу проверить, а так трудно что-то определить.
там же довольно таки много, ничего?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.08.2012, 12:06     SEHException при заполнении вектора #14
Цитата Сообщение от Tailor Посмотреть сообщение
там же довольно таки много, ничего?
Папку с проектом в архиве можете? У меня тоже 2010.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2012, 12:15     SEHException при заполнении вектора
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
09.08.2012, 12:15  [ТС]     SEHException при заполнении вектора #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Папку с проектом в архиве можете? У меня тоже 2010.
отправил в лс, но правда нигде не видно что отправилось
Yandex
Объявления
09.08.2012, 12:15     SEHException при заполнении вектора
Ответ Создать тему
Опции темы

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