I’m trying to process a large graph using a recursive algorithm. Due to the deep recursion, I encountered the problem described at Python: Maximum recursion depth exceeded.
So, I tried increasing the limit on recursion depth, like so:
import sys
sys.setrecursionlimit(5000)
However, whatever value I use for the depth, I cannot get the result I want. Either I still get the exception, or else the program just halts with no output on the screen but: Process finished with exit code -1073741571
.
How can I solve the problem?
See also: What is the hard recursion limit for Linux, Mac and Windows?
Karl Knechtel
61.7k11 gold badges98 silver badges148 bronze badges
asked Dec 17, 2013 at 8:12
Salvador DaliSalvador Dali
212k147 gold badges698 silver badges752 bronze badges
15
You could use something like:
if __name__ == '__main__':
sys.setrecursionlimit(100000)
threading.stack_size(200000000)
thread = threading.Thread(target=your_code)
thread.start()
This solved both my recursion limitation and my heap size limitation.
answered Aug 9, 2015 at 7:42
1
thanks for your guidance. while I test get_h and get_h_mvn on my data for feature selection, i found get_h_mvn works ideally, the calculated entropy values consist with the intuitive observation of feature data. Especially, one feature in fact is discrete, the entropy calculated from get_h_mvn is close to the entropy from standard information entropy equation for discrete variable. However, the get_h performs awfully, firstly, the entropy values calculated are counterintuitive and i also ranked the features based on the entropy, the rank from get_h and get_h_mvn have great difference, second, one feature which values are composed of {0.0: 7950, 0.0003636: 1, 0.0263157: 1}, while runing for this feature, get_h_mvn is stuck at this line» kdtree = cKDTree(x)», the python stop and print «Process finished with exit code -1073741571 (0xC00000FD)»
Есть очень простой код, который запускает рекурсию и выводит текущую глубину рекурсии:
import sys
sys.setrecursionlimit(1000000000)
def rec(deep):
print('deep =', deep)
rec(deep + 1)
if __name__ == '__main__':
rec(0)
У меня он почему-то падает после глубины 3219, хотя в начале программы я установил огромный лимит рекурсии. Ошибка:
Process finished with exit code -1073741571 (0xC00000FD)
Это у меня одного так?
Я запускал на Python3.6
Note: The three methods provided in this article are for reference only, and may not necessarily solve your problem! If there is no other way, you can give it a try.
Encountered such an error code when running the program, Process finished with exit code -1073741571 (0xC00000FD), the program dies when it runs. . system
Windows 10。
I saw on StackOverflow that the stack overflowedHow to overcome Stack Size issue with Visual Studio (running C codes with big array)
Linking is a C++ solution, you can modify the stack memory allocation, you can also modify the code: change the excessively large variables into global variables, So that it is not stored in the stack area。
Use global declarations for variables in python code:
Update:
After changing the code, the same error was reported, and then the stack memory was modified in pycharm to repair:
Help->Find Action->Search VM->
Modify -Xmx750m to -Xmx7500m or other, save and restart pycharm to take effect.
Update again:
It crashes as soon as nnd changes the code. It uses a brand new method to create a new thread to set the stack space:
if __name__ == "__main__":
threading.stack_size(200000000)
thread = threading.Thread(target=launch())
thread.start()
launch() is the name of the method to be launched, hope this is the last update.
Note:
1. MicroSoft error code query (hexadecimal)
2. x86, x64 default stack area 1Mb
I’m trying to process a large graph using a recursive algorithm. Due to the deep recursion, I encountered the problem described at Python: Maximum recursion depth exceeded.
So, I tried increasing the limit on recursion depth, like so:
import sys
sys.setrecursionlimit(5000)
However, whatever value I use for the depth, I cannot get the result I want. Either I still get the exception, or else the program just halts with no output on the screen but: Process finished with exit code -1073741571
.
How can I solve the problem?
See also: What is the hard recursion limit for Linux, Mac and Windows?
Karl Knechtel
60.6k11 gold badges93 silver badges138 bronze badges
asked Dec 17, 2013 at 8:12
Salvador DaliSalvador Dali
209k145 gold badges690 silver badges749 bronze badges
15
You could use something like:
if __name__ == '__main__':
sys.setrecursionlimit(100000)
threading.stack_size(200000000)
thread = threading.Thread(target=your_code)
thread.start()
This solved both my recursion limitation and my heap size limitation.
answered Aug 9, 2015 at 7:42
1
n0v140k 1 / 1 / 0 Регистрация: 30.01.2022 Сообщений: 29 |
||||
1 |
||||
08.04.2022, 12:50. Показов 1565. Ответов 8 Метки нет (Все метки)
Добрый день! пишу код, работа с файлами. СodeBlocks «warning» не выдаёт, но выдаёт «Process returned -1073741571 (0xC00000FD)»… что это значит и что делать?
P.S. это вырезка из основного кода(он у меня на 350 строчек), ищю ошибку и поэтому по частям проверяю. на этой части он выдал мне такую ошибку(пишу на CodeBlocks 20.03).
__________________ 0 |
фрилансер 4430 / 3941 / 858 Регистрация: 11.10.2019 Сообщений: 10,417 |
|
08.04.2022, 12:56 |
2 |
n0v140k, при запуске на отладку где отладчик останавливается ? а ещё: 0 |
John Prick 2058 / 1591 / 678 Регистрация: 27.07.2012 Сообщений: 4,768 |
||||
08.04.2022, 12:59 |
3 |
|||
4) и такое тоже прекратить
1 |
фрилансер 4430 / 3941 / 858 Регистрация: 11.10.2019 Сообщений: 10,417 |
|
08.04.2022, 13:01 |
4 |
да да, инициализацию переменных добавить и открыть для себя вектор )) 0 |
1 / 1 / 0 Регистрация: 30.01.2022 Сообщений: 29 |
|
08.04.2022, 13:45 [ТС] |
5 |
в окне отладчика следующее: в окне сборки написано: «Цель уже была достигнута. Nothing to be done (all items are up-to-date).» блен, вместо смайлика смеющегося там должно быть «:»D» Добавлено через 38 минут 0 |
фрилансер 4430 / 3941 / 858 Регистрация: 11.10.2019 Сообщений: 10,417 |
|
08.04.2022, 13:51 |
6 |
n0v140k, отладчик разве нигде не остановился? Если нет — это плохо, сложнее искать будет например, вот тут индекс j может выйти за край массива. Это даже не проверяется
fam[i][j] 0 |
1 / 1 / 0 Регистрация: 30.01.2022 Сообщений: 29 |
|
08.04.2022, 13:56 [ТС] |
7 |
тогда так писать? 0 |
фрилансер 4430 / 3941 / 858 Регистрация: 11.10.2019 Сообщений: 10,417 |
|
08.04.2022, 14:02 |
8 |
n0v140k, можно и так, но лучше обходиться без магических констант, а использовать переменные. Или всё же лучше вектор 0 |
zss Модератор 12627 / 10125 / 6097 Регистрация: 18.12.2011 Сообщений: 27,158 |
||||
08.04.2022, 20:51 |
9 |
|||
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
08.04.2022, 20:51 |
Помогаю со студенческими работами здесь Process returned -107. в среде codeblocks как расшифровать ошибку?
SFML. Ошибка «Process returned -1073741819» Необработанное исключение: 0xC00000FD: Stack overflow Программа падает при работе с буфером с кодом ошибки -1073741571 Как взять title, process, process id активного окна? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 9 |
Уведомления
- Начало
- » Python для новичков
- » Рекурсия и мой компьютер
#1 Сен. 20, 2017 22:18:56
Рекурсия и мой компьютер
import random import sys print(sys.getrecursionlimit()) sys.setrecursionlimit(40000) print(sys.getrecursionlimit()) g = [] for i in range(200): b = random.randint(0, 1241) g.append(b) def sorter(): global g for i, k in enumerate(g): try: if g[i] > g[i + 1]: g[i], g[i + 1] = g[i + 1], g[i] return sorter() except IndexError: break sorter() print(g)
Пытался создать что то похожее на метод sort() и столкнулся с интересным поведением змеи. При запуске этого кода на моём пк интерпретатор выдаёт вот такую ошибку:
Process finished with exit code -1073741571 (0xC00000FD)
Причём пишет только это, никакой трэйсбэк не вылетает и красные слова тоже. Решил запустить через онлайн компилятор — всё заработало прекрасно и ошибки никакой не было.
Почему так?
Лучший учитель — это ты сам.
Отредактировано Djo0513 (Сен. 20, 2017 22:19:57)
Офлайн
- Пожаловаться
#2 Сен. 21, 2017 00:16:32
Рекурсия и мой компьютер
Вы гуглить видимо совсем не пробовали. Подумали что нашли что то сверх неординарное и надо быстрее показать это сообществу. Однако первая же ссылка в гугле расставляет все на места — StackOverflow.com
P.S. у меня работает
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
Отредактировано JOHN_16 (Сен. 21, 2017 00:17:44)
Офлайн
- Пожаловаться
#3 Сен. 21, 2017 13:41:00
Рекурсия и мой компьютер
JOHN_16
Не все родились с пониманием английского. Я смотрел на stack overflow, но кроме того что надо подключать потоки ничего не понял, поэтому я задал вопрос сюда, чтоб меня разъяснили.
Это точно раздел для новичков?
Лучший учитель — это ты сам.
Офлайн
- Пожаловаться
#4 Сен. 21, 2017 14:02:37
Рекурсия и мой компьютер
Djo0513
Не все родились с пониманием английского.
а есть кто-то, кто родился с пониманием английского?
Отредактировано WoMax (Сен. 21, 2017 14:03:20)
Офлайн
- Пожаловаться
#5 Сен. 21, 2017 15:07:03
Рекурсия и мой компьютер
> Не все родились с пониманием английского.
Не вижу никаких проблем: http://translate.google.ru/
С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.
Офлайн
- Пожаловаться
#6 Сен. 21, 2017 15:11:40
Рекурсия и мой компьютер
Djo0513 Если вкратце то 0xC00000FD это переполнение стека (stack owerflow)
тут https://msdn.microsoft.com/en-us/library/cc704588.aspx можно посмотреть все коды ошибок корпорации зла MS.
по ссылке на StackOverflow, котороую вам дал JOHN_16, советуют увеличить размер стека.
По той же ссылке рекомендуют использовать threading где этот размер можно указать ручками threading.stack_size() при создании новой нити.
но можете использовать CreateThread из winAPI https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx или любое другое решение которое посчитаете приемлимым.
Djo0513
Не все родились с пониманием английского.
Надо бателька стараться, если хотите заниматься програмированием, без этого никак.
ЗЫ да у меня тоже все работает , не вызывая перепонения стека.
==============================
Помещайте код в теги:
Бериегите свое и чужое время.
Отредактировано PEHDOM (Сен. 21, 2017 15:12:57)
Офлайн
- Пожаловаться
- Начало
- » Python для новичков
- » Рекурсия и мой компьютер
Примечание. Три метода, представленные в настоящем документе, предназначены только для справки и могут не обязательно решить вашу проблему! Если другого закона нет, вы можете попробовать это.
Этот код ошибки встречается при выполнении процедур, а процесс завершен с кодом выхода кода -1073741571 (0xC00000FD), программа RAN и RAN. Отказ система
Windows 10。
Stackoverflow рассматривается как переполнение области стекаHow to overcome Stack Size issue with Visual Studio (running C codes with big array)
Ссылка представляет собой решение C ++, вы можете изменить распределение памяти стека или изменить код: Изменить чрезмерные переменные в глобальные переменные.Это не хранится в зоне стека.。
В коде Python вы можете использовать глобальную декларацию:
Обновить:
После изменения кода я сообщил о том же ошибке, затем измените ремонт памяти стека в Pycharm:
Помощь-> Найти действие-> Поиск VM->
Изменение -xmx750m в -xmx7500m или другой, сохранить перезапуск Pycharm вступите в силу.
Обновить еще раз:
NND изменился на код, оно свободно, используя новый метод, новый поток настроить пространство стека:
if __name__ == "__main__":
threading.stack_size(200000000)
thread = threading.Thread(target=launch())
thread.start()
Запуск () — это имя метода для начала, я надеюсь, что это последнее обновление.
Примечание:
1.Microsoft Code Code Query (16)
2.x86, X64 Учетная площадь по умолчанию 1 МБ
Я получаю странный код выхода в clion:
код выхода -1073741571 (0xC00000FD)
Это мой код:
int main()
{
std::cin.sync_with_stdio(false);
std::cin.tie(nullptr);
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n = 0, i = 0, j = 0;
int arr[30007][5];
for (i = 1; i <= 30000; i++)
arr[0][i] = 1;
//...
return 0;
}
Я проверил это и выяснил это из-за этой строки:
int arr[30007][5];
У меня не было проблем в объявление массива размером менее 1.000.000 2 дня назад и сейчас я получаю эту ошибку.
Я ничего не изменил в Clion.
Что я должен делать?
0
Решение
Номер ошибки 0xC00000FD
расшифровывается как «переполнение стека» (я полагаю, ваша платформа Windows). Под Windows локальные переменные размещаются в стеке (как и на большинстве других платформ тоже) и int arr[30007][5]
довольно большой (30007 * 5 * 4 = 600140 байт), а стеки обычно довольно малы (обычно около 1 Мб, опять же в зависимости от платформы)
У вас есть много вариантов:
- использование
std::vector
вместо необработанных массивов (предпочтительно) - объявить массив как статический (
static int arr[30007][5];
), то он больше не будет находиться в стеке - увеличить размер стека вашего исполняемого файла. Это очень платформа / слишком зависит.
- выделить массив динамически
0
Другие решения
Других решений пока нет …
Not sure what is wrong. I am using PyCharm and it shows no errors. But when I run it I get: Process finished with exit code -1073741571 (0xC00000FD)
import wx import wx.xrc class MyApp(wx.App): def OnInit(self): self.frame = MyFrame(None) self.SetTopWindow(self.frame) self.frame.Show() return True class MyFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"My List", pos=wx.DefaultPosition, size=wx.Size(500, 400), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) self.SetBackgroundColour(wx.Colour(0, 128, 128)) myFlexGridSizer = wx.FlexGridSizer(1, 1, 0, 0) myFlexGridSizer.SetFlexibleDirection(wx.BOTH) myFlexGridSizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) myBoxGridSizer = wx.BoxSizer(wx.VERTICAL) self.headerLabel = wx.StaticText(self, wx.ID_ANY, u"Glucose", wx.Point(-1, -1), wx.DefaultSize, 0) self.headerLabel.Wrap(-1) self.headerLabel.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 75, 90, 92, True, wx.EmptyString)) myBoxGridSizer.Add(self.headerLabel, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) mListBoxChoices = [u"Update Data", u"A1c", u"Exit"] self.mListBox = wx.ListBox(self, wx.ID_ANY, wx.Point(-1, -1), wx.Size(300, 300), mListBoxChoices, wx.LB_SINGLE) self.mListBox.SetFont(wx.Font(12, 75, 90, 90, False, wx.EmptyString)) myBoxGridSizer.Add(self.mListBox, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5) myFlexGridSizer.Add(myFlexGridSizer, 1, wx.EXPAND, 5) self.SetSizer(myFlexGridSizer) self.Layout() self.Centre(wx.BOTH) self.mListBox.Bind(wx.EVT_LISTBOX, self.showSelectedItem) def __del__(self): pass def showSelectedItem(self, event): wx.MessageBox(event.GetEventObject().GetStringSelection(), "Selected") app = MyApp(False) MyFrame.Show() app.MainLoop()
Being new to python I tried to find the answer but nothing fit to my problem.
Gary
Posts: 3,458
Threads: 101
Joined: Sep 2016
Reputation:
143
What happens if you remove line 56? Your app already creates and shows the frame, so showing it again (and without a root object) seems odd.
Posts: 3,883
Threads: 56
Joined: Jan 2018
Reputation:
307
It could be a PyCharm issue, does it occur if you run the code in an ordinary terminal out of PyCharm?
Posts: 65
Threads: 18
Joined: Dec 2018
Reputation:
0
Jan-10-2019, 11:21 PM
(This post was last modified: Jan-11-2019, 11:50 AM by gehrenfeld.)
Yes, it does.
But I redid the coded so it was more up to date with Python 3.7 and everything now works fine
Thank you
Gary