Dave Joseph Ответов: 2

Процесс завершается из-за stackoverflowexception VB


Привет, я пытаюсь написать программу судоку для создания больших головоломок 42x42.
Когда я пытаюсь запустить программу, я получаю сообщение об ошибке "процесс завершается из-за исключения StackOverflowException"
Похоже, я достиг некоторого внутреннего предела Visual Studio с помощью Visual Basic
Программа 36x36 работает нормально, но теперь дополнительные места хранения и строки кода взрывают стек

Есть ли что-нибудь, что я могу сделать, чтобы заставить эту программу работать?

Что я уже пробовал:

Я также пробовал запускать программу в потоке, указывая максимальный размер стека, но это также не имеет значения с помощью кода

Dim ThreadA As New Thread(AddressOf MyBackgroundThreadA, maxStackSize:=4)

2 Ответов

Рейтинг:
0

OriginalGriff

Вы указываете максимальный размер стека в 4 байта.

Dim ThreadA As New Thread(AddressOf MyBackgroundThreadA, maxStackSize:=4)

Этого достаточно для хранения одного 32-битного целого числа, но недостаточно для обратного адреса в 64-битной системе. Поэтому почти наверняка, как только поток запустится и вызовет метод "run", он превысит доступный стек, и ваше приложение рухнет: Конструктор Потоков (System.Продевать Нитку) | Майкрософт Документы[^]

Дайте ему размер по умолчанию (1 Мб) или, по крайней мере, разумные 1024 байта (если ваш код не делает или хранит много, или использует большие локальные переменные.)


Рейтинг:
0

Richard MacCutchan

Цитата:
Похоже, я достиг некоторого внутреннего предела Visual Studio с помощью Visual Basic
Предел - это размер стека, который вам удалось превысить. Одной из наиболее распространенных причин этого является рекурсивный код, который использует большие объемы стекового пространства для локальных переменных. Вам нужно исследовать, где в вашем коде вы потребляете все пространство.