Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для WizarД
53 / 56 / 10
Регистрация: 07.02.2011
Сообщений: 556
Записей в блоге: 1
.NET 4.x

StackOverFlow

25.02.2014, 23:45. Показов 839. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ув. форумчане, столкнулся с проблемой, есть рекурсивная функция, которую необходимо оптимизировать,но вот сколько ни пытаюсь, все планы рушатся и StackOverFlow вылетает постоянно.
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
 public void Parse(byte[] data)
        {
            Socket skt = new Socket(SocketType.Dgram, ProtocolType.Udp);
            skt.ReceiveTimeout = 1000;
 
            skt.Connect(Encryptor.GetNextIP(), port);
            skt.Send(data);
            try
            {
             //куча всяких действий по получению опкода
                switch (opCode)
                {
                    case 0x01:
                        p = new Packet(opCode);
                        p.WriteArray(Encryptor.ClientData(answer, false));
                        Regex rgx = new Regex("\"(?<Name>.+?):");
                        string part = p.ReadAString();
                        string res;
                        if (part[part.Length - 1] != '}') part += '}';
                        if (rgx.Match(part).Groups["Name"].Value == "")
                        {
                            p = null;
                            Parse(data);
                            break;
                        }
                        else
                        { res = "ID=" + rgx.Match(part).Groups["Name"].Value; }
                        ParseInfo(rgx.Match(part).Groups["Name"].Value);
                        p = null;
                        Encryptor = null;
                        break;
                    default: string ans = Encoding.ASCII.GetString(recv.Take(bytes).ToArray());
                        if (ans.Contains("EndOfStream") || ans.Contains("Begin"))
                        {
                            Failed();
                            Encryptor = null;
                            break;
                        }
                        else
                        {
                            p = null;
                            Parse(data);
                        }
                        break;
                }
            }
            catch
            {
                skt.Close();
                skt.Dispose();
                GC.Collect();
                Parse(data);
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2014, 23:45
Ответы с готовыми решениями:

StackOverflow при использовании Parallel.For
Привет. Есть некая рекурсия, которая считает связанные элементы в 3д массиве рекурсивым методом. При запуске программы в обычном потоке я...

Очередь выполнения множества запросов и рано или поздно наступающий StackOverflow
Вообщем имеется очередь выполнения: в очередь кладется команда (например, выполнение sql запроса) и потом в 1 потоке выполняются все...

Конструкторы. Stackoverflow
Добрый день. Есть класс Cars и в нем массив объектов типа Cars. В конструктор передаю параметры name, speed. При создании экземпляра класса...

4
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
26.02.2014, 09:03
1. Проверьте, что из рекурсии происходит выход. Да, понимаю, что капитанствую, но...
2. Уберите Parse из Catch, так не делается.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
26.02.2014, 10:44
Думаю что StackOverflowException всё-таки вылетает из-за
C#
1
Socket skt = new Socket(SocketType.Dgram, ProtocolType.Udp);
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
26.02.2014, 15:55
в общем что получается: вы вызываете метод, он пытается отработать, ловит ошибку (какую на данный момент неизвестно), смотрит в catch - а там повторный вызов это-го же метода с таким же аргументом. Он пытается отработать, ловит ошибку (наверняка ту же)... В общем я бы тоже в итоге выдал StackOverflow. что, я думаю, не удивительно.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 21:52
Spectral-Owl, забавно, что если бы шарп умел в хвостовые рекурсии, то SO не вылетало бы

Хотя не, там в ветке default еще один вызов, значит было бы то же самое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2014, 21:52
Помогаю со студенческими работами здесь

Неожиданный StackOverflow в InitializeComponent
Вроде бы программулина работала-работала и после очередного запуска отладки выдает StackOverFlow в дизайнере формы (приложили скрин). ...

Исключение StackOverflow при запуске программы
Для курсовой работы задали написать программу на C# с помощью WindowsForms. После того, как запускаю программу и нажимаю на кнопку под...

Неправильно строится график. Исключение StackOverFlow
Добрый день. Будьте добры, помогите. Строю график функции (ax+b)/sin(kx+m) Если ввести m или b равное нулю, то вылетает StackOverFlow....

Почему геттер выдает исключение StackOverflow?
Всем доброго дня. Вот такой вопрос. Пишу код, который бы из таблицы DataGridView брал бы имя пользователя и при этом, если бы я переходил...

программа ругается ошибка stackoverflow
вот кусок кода программы. не пойму в чом причина ошибки. ругается при закрытии формы procedure TForm1.BitBtn2Click(Sender: TObject); ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru