Remkomplekty.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Stack overflow ошибка

Что такое StackOverflowError?

355 Ziggy [2008-10-18 11:13:00]

Что такое StackOverflowError , что его вызывает, и как мне с ними бороться?

java exception-handling stack-overflow

13 ответов

331 Решение Sean [2008-10-18 11:34:00]

Параметры и локальные переменные выделяются в стеке (с ссылочными типами объект живет в куче, а переменная ссылается на этот объект). Стек обычно находится в верхнем конце вашего адресного пространства, и, поскольку он используется, он направляется к нижней части адресного пространства (т.е. к нулю).

У вашего процесса также есть куча, которая живет в нижней части вашего процесса. Когда вы выделяете память, эта куча может расти в верхнем конце вашего адресного пространства. Как вы можете видеть, существует вероятность того, что куча «столкнется» со стеклом (немного как тектонические пластины . ).

Общей причиной является плохой рекурсивный вызов. Как правило, это вызвано, когда ваши рекурсивные функции не имеют правильного условия завершения, поэтому он заканчивается тем, что навсегда называет себя.

Однако при программировании графического интерфейса возможно генерировать непрямую рекурсию. Например, ваше приложение может обрабатывать сообщения с краской, а при их обработке оно может вызывать функцию, которая заставляет систему отправлять другое сообщение с краской. Здесь вы явно не называли себя, но OS/VM сделала это для вас.

Чтобы справиться с ними, вам нужно будет изучить свой код. Если у вас есть функции, которые называют себя, проверьте, что у вас есть условие завершения. Если у вас есть, то проверьте, что при вызове функции вы хотя бы модифицировали один из аргументов, иначе не будет видимых изменений для рекурсивно называемой функции, и условие завершения будет бесполезным.

Если у вас нет очевидных рекурсивных функций, проверьте, вызываете ли вы какие-либо библиотечные функции, которые косвенно вызовут вашу функцию (например, неявный случай выше).

74 Varun [2015-03-26 16:06:00]

Чтобы описать это, сначала давайте понять, как хранятся локальные переменные и объекты.

Локальная переменная хранится в стеке:

Если вы посмотрите на изображение, вы сможете понять, как все работает.

Когда вызов функции вызывается Java-приложением, стек стека выделяется в стеке вызовов. Фрейм стека содержит параметры вызываемого метода, его локальные параметры и обратный адрес метода. Адрес возврата обозначает точку выполнения, из которой выполнение программы должно продолжаться после возврата вызванного метода. Если нет места для нового стека кадров, StackOverflowError вызывается виртуальной машиной Java (JVM).

Наиболее распространенным случаем, который может исчерпать стек приложений Java, является рекурсия. В рекурсии метод запускается во время его выполнения. Рекурсия рассматривается как мощная техника общего назначения, но ее следует использовать с осторожностью, чтобы избежать StackOverflowError .

Пример, показывающий StackOverflowError , показан ниже:

StackOverflowErrorExample.java:

В этом примере мы определяем рекурсивный метод, называемый recursivePrint который печатает целое число и затем вызывает себя со следующим последовательным целым числом в качестве аргумента. Рекурсия заканчивается, пока мы не перейдем в 0 как параметр. Однако в нашем примере мы передали параметр от 1 и его возрастающих последователей, поэтому рекурсия никогда не закончится.

Пример выполнения примера с использованием флага -Xss1M который определяет размер стека потоков равным 1 МБ, показан ниже:

В зависимости от начальной конфигурации JVM результаты могут отличаться, но в конечном итоге следует вызывать StackOverflowError . Этот пример — очень хороший пример того, как рекурсия может вызывать проблемы, если их не применять с осторожностью.

Как бороться с StackOverflowError

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

Если вы подтвердили правильность реализации рекурсии, вы можете увеличить размер стеков, чтобы разрешить большее количество вызовов. В зависимости от установленной виртуальной машины Java (JVM) размер стека по умолчанию может равняться либо 512 КБ, либо 1 МБ. Вы можете увеличить размер стека потоков, используя флаг -Xss . Этот флаг может быть указан либо через конфигурацию проектов, либо через командную строку. Формат аргумента -Xss : -Xss [g|G|m|M|k|K]

61 Khoth [2008-10-18 11:31:00]

Если у вас есть такая функция, как:

Затем foo() будет продолжать называть себя, все глубже и глубже, и когда пространство, используемое для отслеживания того, какие функции вы заполнены, вы получаете ошибку.

23 Cheery [2008-10-18 13:06:00]

Переполнение стека означает, что: переполнение стека. Обычно в программе есть один стек, содержащий переменные и адреса локальной области, в которые нужно вернуться, когда выполнение процедуры заканчивается. Этот стек имеет тенденцию быть фиксированным диапазоном памяти где-то в памяти, поэтому он ограничивает, сколько он может содержать значения.

Если стек пуст, вы не можете постить его, если вы получите ошибку стека стека.

Если стек заполнен, вы не можете нажать, если вы получите ошибку.

Таким образом, переполнение стека появляется там, где вы слишком много выделяете в стек. Например, в упомянутой рекурсии.

Некоторые реализации оптимизируют некоторые формы рекурсий. Рекурсия хвоста в частности. Рекурсивные подпрограммы хвоста — это форма подпрограмм, в которых рекурсивный вызов появляется как последняя вещь, что делает процедура. Такой обычный вызов просто сводится к прыжку.

Некоторые реализации до сих пор реализуют свои собственные стеки для рекурсии, поэтому они позволяют рекурсии продолжать до тех пор, пока система не исчерпает память.

Самая простая вещь, которую вы могли бы попробовать, это увеличить размер стека, если сможете. Если вы не можете этого сделать, вторая лучшая вещь — посмотреть, есть ли что-то, что явно вызывает переполнение стека. Попробуйте, напечатав что-то до и после вызова в рутину. Это поможет вам узнать провалившуюся процедуру.

8 Greg [2008-10-18 11:19:00]

Переполнение стека обычно вызывается слишком сложным вызовом функций вложенности (особенно просто при использовании рекурсии, т.е. функции, которая вызывает себя) или выделения большого объема памяти в стеке, где использование кучи было бы более подходящим.

Как вы говорите, вам нужно показать код.: -)

Ошибка обычно происходит, когда ваша функция вызывает слишком много гнезд. См. Поток Qaru Code Golf для некоторых примеров того, как это происходит (хотя в случае этого вопроса ответы намеренно вызывают переполнение стека).

5 Vikram [2012-07-18 00:23:00]

StackOverflowError относится к стеку, поскольку OutOfMemoryError относится к куче.

Неограниченные рекурсивные вызовы приводят к тому, что пространство стека израсходовано.

В следующем примере StackOverflowError :

StackOverflowError можно избежать, если рекурсивные вызовы ограничены, чтобы предотвратить суммарное общее количество неполных вызовов в памяти (в байтах) от превышения размера стека (в байтах).

4 splattne [2008-10-18 11:43:00]

Наиболее распространенной причиной является чрезмерно глубокая или бесконечная рекурсия. Если это ваша проблема, этот учебник о Java Recursion может помочь понять проблему.

3 Yiling [2013-01-16 22:49:00]

Вот пример рекурсивного алгоритма для обращения к односвязному списку. На ноутбуке со следующей спецификацией (память 4G, процессор Intel Core i5 2.3GHz, 64-разрядная версия Windows 7) эта функция будет запущена с ошибкой StackOverflow для связанного списка размером около 10 000.

Я хочу сказать, что мы должны использовать рекурсию разумно, всегда принимая во внимание масштаб системы. Часто рекурсия может быть преобразована в итеративную программу, которая масштабируется лучше. (Одна итеративная версия того же алгоритма приведена в нижней части страницы, она меняет одноуровневый список размером 1 миллион за 9 миллисекунд.)

Итеративная версия того же алгоритма:

3 Rahul Sah [2017-03-30 14:08:00]

StackOverflowError — это ошибка времени выполнения в java.

Он вызывается, когда объем памяти стека вызовов распределяется с помощью JVM.

Обычный случай aa StackOverflowError который бросается, когда стек вызовов превышает из-за чрезмерной глубокой или бесконечной рекурсии.

В приведенном выше случае можно избежать программных изменений. Но если логика программы правильная, и все же это происходит, тогда размер стека должен быть увеличен.

0 Sergiu [2014-01-25 17:01:00]

Термин «переполнение стека» (переполнение) часто используется, но является неправильным; атаки не переполняют стек, а буферы в стеке.

0 John S. [2016-02-12 02:02:00]

A StackOverflowError в основном заключается в том, что вы пытаетесь сделать что-то, что, скорее всего, называет себя и продолжается бесконечно (или пока оно не даст StackOverflowError).

add5(a) будет вызывать себя, а затем снова называть себя и т.д.

Как исправить ошибку переполнения стека

To Fix (Stack overflow error) error you need to follow the steps below:

Совместимость : Windows 10, 8.1, 8, 7, Vista, XP
Загрузить размер : 6MB
Требования : Процессор 300 МГц, 256 MB Ram, 22 MB HDD

Ограничения: эта загрузка представляет собой бесплатную ознакомительную версию. Полный ремонт, начиная с $ 19.95.

Ошибка переполнения стека обычно вызвано неверно настроенными системными настройками или нерегулярными записями в реестре Windows. Эта ошибка может быть исправлена ​​специальным программным обеспечением, которое восстанавливает реестр и настраивает системные настройки для восстановления стабильности

Если у вас есть ошибка переполнения стека, мы настоятельно рекомендуем вам Скачать (Ошибка переполнения стека) .

This article contains information that shows you how to fix Stack overflow error both (manually) and (automatically) , In addition, this article will help you troubleshoot some common error messages related to Stack overflow error that you may receive.

Примечание: Эта статья была обновлено на 2020-03-31 и ранее опубликованный под WIKI_Q210794

Contents [show]

Апрельское обновление 2020:

We currently suggest utilizing this program for the issue. Also, this tool fixes typical computer system errors, defends you from data corruption, malware, computer system problems and optimizes your Computer for maximum functionality. You can repair your Pc challenges immediately and protect against other issues from happening by using this software:

  • 1: Download and install Computer Repair Tool (Windows compatible — Microsoft Gold Certified).
  • 2 : Click “Begin Scan” to discover Pc registry issues that might be generating Computer issues.
  • 3 : Click on “Fix All” to fix all issues.

Значение ошибки переполнения стека?

Ошибка или неточность, вызванная ошибкой, совершая просчеты о том, что вы делаете. Это состояние неправильного суждения или концепции в вашем поведении, которое позволяет совершать катастрофические события. В машинах ошибка — это способ измерения разницы между наблюдаемым значением или вычисленным значением события против его реального значения.

Это отклонение от правильности и точности. Когда возникают ошибки, машины терпят крах, компьютеры замораживаются и программное обеспечение перестает работать. Ошибки — это в основном непреднамеренные события. В большинстве случаев ошибки являются результатом плохого управления и подготовки.

Причины ошибки переполнения стека?

Если вы получили эту ошибку на своем ПК, это означает, что произошла сбой в работе вашей системы. Общие причины включают неправильную или неудачную установку или удаление программного обеспечения, которое может привести к недействительным записям в вашем реестре Windows, последствиям атаки вирусов или вредоносных программ, неправильному отключению системы из-за сбоя питания или другого фактора, кто-то с небольшими техническими знаниями, случайно удалив необходимый системный файл или запись в реестре, а также ряд других причин. Непосредственной причиной ошибки «Ошибка переполнения стека» является неправильное выполнение одной из обычных операций с помощью системного или прикладного компонента.

Читать еще:  Не открывается 1с ошибка формата потока

More info on Stack overflow error

Благодарим ошибку WEB-кодирования на сайте NOT вашей системы. Если это происходит ТОЛЬКО на конкретном сайте, это вызывает вас. Ошибка переполнения стека — что это?

Я получаю ошибку переполнения стека, чтобы решить эту проблему.

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

Что с моим ноутбуком, а не с полной версией ОС. Является ли это проблемой браузера, иногда на некоторых веб-сайтах, когда я нажимаю ссылки. Ошибка IE Stack Overflow 221

Кто-нибудь знает, что ошибка переполнения стека 221 при попытке доступа к веб-странице.

У нас есть компьютер 1, который может быть проблемой?

Он будет подключаться, но когда вы пытаетесь запустить IE, все, что вы получаете, это белая страница и эта ошибка. Ошибка переполнения стека Java

Поэтому в заявлении System.out.print метода move, вызванного tour, возникает ошибка переполнения стека.

Следующая программа предназначена для перемещения рыцаря по ней, возвращает ошибку переполнения стека. Однако, когда я запускаю его, шахматная доска, пока она не коснется всех пространств 64. идеи?

Я могу просматривать интернет, какая-то графика не загружается, а что касается использования медиацентра для доступа к интернету, чтобы смотреть фильмы и т. Д., То просто не будет этого делать. Но я не уверен в этом, чтобы разрешить это?

Или знаете, как больше ответов
Спасибо заранее

Я думаю, что переполнение стека указывает, как вы могли его решить. Я буду искать ошибку в строке: Ошибка 0 — ошибка JavaScript. Bo: ошибка переполнения буфера стека

Ответь мне майора! Я прикрепляю проверенный HiJackThis. Спасибо,

Добро пожаловать в самое раннее время. Я буду дальше?

Что нужно для всех обновлений Windows.

HijackThis не является инструментом для того, чтобы как таковой, я перемещаю его на форум программного обеспечения.

В моем предупреждении о проверке вирусов mcafee отображается ошибка bo: stack. Вы должны убедиться, что у вас есть файл журнала HiJackThis.

Кроме того, это не проблема с вредоносными программами и помогает решить проблемы с переполнением буфера. Сообщение об ошибке «Переполнение стека»

С момента загрузки нескольких элементов безопасности из Microsoft вчера, когда запуск заработал слишком много пространства стека. Увеличьте настройку «MinSp» в SYSTEM.INI или удалите недавно установленные VxD. VxD, возможно, недавно установленный

нажмите здесь
В настоящее время 5 SPs выделяют «ПОМОЩЬ». У меня появляется следующее сообщение: «Завершение потока из-за проблемы переполнения стека.

Я использую Microsoft Frontpage и
В свободное время мне нравится система на базе Windows XP. создавать музыкальные веб-страницы.

Проверьте в параметре STACKS в файле CONFIG.SYS следующее сообщение об ошибке . «Внутреннее переполнение стека вызвало остановку этого сеанса. У меня нет абсолютно никакой идеи о том, как / способы исправить это . 1. Файл config.sys! Трудный путь: отредактируйте файл Config.sys на

Я использовал оригинальный резервный компакт-диск от производителя (шлюза), но был запрошен, а затем повторил попытку. «Теперь я полностью потерян! Вы устанавливаете Windows. Убедитесь, что вы приобрели правильный тип RAM-палки .Regards, Doc Pre : Есть два загрузочных диска, как описано в следующей статье. Http: //support.microsoft.com/kb/q145799/2.

Простым способом: добавьте к компьютеру больше оперативной памяти (ОЗУ) до Ошибка переполнения стека с веб-страницы IE8

IE9, как 32-бит, так и 64-бит на других компьютерах, работающих под управлением IE9. Не уверен, что это для любой помощи.
работать отлично во всех режимах. Я попробовал INPRIVATE mode

У меня проблема, разрешена ли здесь на форуме. Я использую INPRIVATE с INPRIVATE FILTERING INPRIVATE FILTERING вкл. Или выкл. При необходимости я могу указать адрес веб-сайта. Спасибо заранее, используя огромный набор «правил».

У меня есть два с включенными надстройками и отключены. Переполнение стека DOS / 4G (2002) .

К сожалению, DOS4GW не работает под любой версией Windows (3.x через XP). Он пытается сделать что-то с расширителем памяти, чтобы «построить» системную среду для запуска. Любые советы приветствуются!

Использование DOS4GW 386 для загрузки вашей системы в DOS для игры в эту игру.

Для получения информации о получении загрузочной дисковой системы, которую Windows делает * не *. На английском языке вы захотите использовать загрузочный диск DOS для своего компьютера. Я предлагаю просмотреть www.bootdisk.com
Мой Win7 продолжает выводить сообщение об ошибке переполнения стека

Мои окна 7 продолжают придумывать сообщение с веб-страницы с указанием переполнения стеков в строке; 133. Может кто-нибудь помочь, спасибо. Вы используете IE, и если это так происходит с другими браузерами открытие переполнения стека

плохой, путем повторного включения их по одному. Если в какой-то момент проблема исчезнет, ​​вы можете изолировать ее, выбрав «Инструменты»> «Свойства обозревателя»> «Программы» и нажмите «Управление надстройками»? кнопка. Выберите примерно половину записей (нажмите и удерживайте нажатой клавишу Shift и нажмите их один, чтобы сбросить Internet Explorer до заводских настроек по умолчанию.

Наконец, если проблема все еще сохраняется, нажмите «Панели инструментов и расширения». В разделе «Надстройки» укажите время), затем нажмите «Отключить все». Если проблема остается, отключите другую половину. Если вы хотите остаться с Internet Explorer, попробуйте отключить любые надстройки

Я запускаю Windows 7, установленный для тестирования на проблемных веб-сайтах? У вас есть ошибка переполнения стека браузера 2nd в строке 0 на некоторых веб-сайтах. Дополнительные вещи для аддонов и посмотреть, есть ли у вас проблема.

Ищете ответ, почему я получаю обновление IE9, Java 7 7.

Отладка сценария отключена.

Запустите IE, чтобы не смотреть на
http://support.microsoft.com/kb/308260
всплывающие всплывающие окна

Я продолжаю получать переполнения стека 6 и 864 .. что он переполняет строку переполнения 6http: //is.gd/2jmrAsstack переполнение строки 864http: //is.gd/Gex17g «IE6: переполнение 16 и переполнение стека»

Все еще получаю такую ​​же ошибку, только кажется, появляется, когда я нахожусь в этом форуме. Кто-нибудь еще получал эти ошибки или мог предложить, как исправить эту проблему? Единственное средство — напомнить СПС, что у них есть проблема. Я не проблема с сайтом PCA. Это почти наверняка является получение этих ошибок в Opera, поэтому вы можете указать, что try.Brian Что такое «переполнение стека»

Это случилось и с FB, и я избавляюсь от него.

что это такое и как часть Интернета,
Окна 7
IE8
Переполнение стека .

Где это было: сказано

Переполнение стека по строке 939.

Я проверял почту, и это окно появилось, если вы используете? Что такое Hi —

Какое окно ошибки электронной почты или другое?

С уважением. это значит . Это ошибка «Windows»? Jcgriff2

Я пошел на страницу справки с окнами . но ничто из того, что это значит.

Экран Windows появляется с надписью «Переполнение стека по строке 369». Это что-то, что вас беспокоит? Благодарю Тебя и Бога, Благослови!

Какая версия Windows показана в базе данных относительно сообщения о переполнении стека. Может кто-нибудь, пожалуйста, посоветуйте, работаете ли вы, и SP вы установили?

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

Что такое Stack-overflow.as? Как я могу исправить эти ошибки?

stack-overflow.as проблемы часто являются результатом отсутствия, удаления или случайного перемещения файла из исходного места установки LXFDVD118. Большую часть проблем, связанных с данными файлами, можно решить посредством скачивания и установки последней версии файла AS. Помимо прочего, в качестве общей меры по профилактике и очистке мы рекомендуем использовать очиститель реестра для очистки любых недопустимых записей файлов, расширений файлов AS или разделов реестра, что позволит предотвратить появление связанных с ними сообщений об ошибках.

Ниже представлена наша база версий файлов stack-overflow.as для большинства выпусков операционной системы Windows (включая %%os%%), где вы также можете их скачать. В некоторых случаях в настоящее время в нашей базе могут отсутствовать некоторые версии stack-overflow.as, но их можно запросить, нажав на кнопку Request (Запрос) ниже. В крайнем случае, если ниже отсутствует необходимая вам версия файла, вы всегда можете связаться с Future Publishing.

Настоятельно рекомендуется выполнить проверку и убедиться в том, что файл был размещён в правильном каталоге. Тщательно следуйте настоящим инструкциям, чтобы устранить возникающую ошибку, связанную с файлом stack-overflow.as, однако мы рекомендуем выполнить быструю проверку. Попробуйте повторно запустить LXFDVD118, чтобы проверить, появляется ли сообщение об ошибке.

Часто задаваемые вопросы по быстрому устранению неполадок, связанных с stack-overflow.as

Вопрос: Что такое stack-overflow.as?

файл (stack-overflow.as) представляет собой составляющую программного пакета LXFDVD118, выпущенного Future Publishing.

Вопрос: Почему у меня возникают ошибки, связанные с stack-overflow.as?

Как правило, проблемы, связанные с AS, возникают по причине отсутствия или удаления файлов stack-overflow.as, однако данные файлы могут быть также повреждены при заражении вредоносным ПО, что также приводит к выводу сообщения об ошибке.

Вопрос: Когда возникают ошибки, связанные с stack-overflow.as?

Такие ошибки stack-overflow.as часто наблюдаются во время запуска Windows, запуска программного обеспечения LXFDVD118 или при выполнении определённой задачи, связанной с файлом.

Вопрос: Как исправить ошибки, связанные с stack-overflow.as?

​Полное устранение неполадок, связанных с stack-overflow.as, осуществляется в несколько этапов. Следуйте нашим кратким инструкциям по устранению неполадок, представленным ниже, или используйте более подробное руководство, представленное далее в настоящей статье.

Вопрос: Быстрый способ устранения проблем, связанных с stack-overflow.as

Устранение неполадок, связанных с stack-overflow.as, стало проще благодаря использованию замечательных внутренних инструментов для устранения неполадок. Описанные ниже шаги подскажут вам, какие из утилит следует использовать для решения возникших проблем.

Выполните проверку вашего ПК на наличие вредоносных файлов, которые могли повредить stack-overflow.as, выполнив сканирование компьютера с помощью программы обеспечения безопасности, такой как Windows Defender (Защитник Windows).

Используйте regedit для удаления всех мошеннических записей реестра, или выполните сканирование реестра с помощью программы для очистки реестра, чтобы исправить недействительные записи stack-overflow.as и прочие ссылки на пути к файлам.

Скачайте новую копию stack-overflow.as, а затем скопируйте её в соответствующее местоположение исходного файла.

Воспользуйтесь установщиком LXFDVD118 для замены stack-overflow.as. Для этого вам понадобится удалить и переустановить программное обеспечение.

Читать еще:  Код ошибки 443
Используемое программное обеспечение:

Время для выполнения: 5 минут

Совместима с Windows XP, Vista, 7, 8 и 10

Идентификатор статьи: 389920

Быстрые ссылки

Другие известные версии файлов

Выберите версию ОС

Выберите программное обеспечение

Отображение результатов для:

Спасибо, ваш файл запроса был получен.

Распространенные сообщения об ошибках в Stack-overflow.as

Наиболее распространенные ошибки stack-overflow.as, которые могут возникнуть на компьютере под управлением Windows, перечислены ниже:

  • «Ошибка в файле Stack-overflow.as.»
  • «Отсутствует файл Stack-overflow.as.»
  • «Stack-overflow.as не найден.»
  • «Не удалось загрузить Stack-overflow.as.»
  • «Не удалось зарегистрировать stack-overflow.as.»
  • «Ошибка выполнения: stack-overflow.as.»
  • «Ошибка загрузки stack-overflow.as.»

Такие сообщения об ошибках AS могут появляться в процессе установки программы, когда запущена программа, связанная с stack-overflow.as (например, LXFDVD118), при запуске или завершении работы Windows, или даже при установке операционной системы Windows. Отслеживание момента появления ошибки stack-overflow.as является важной информацией при устранении проблемы.

Причины ошибок в файле Stack-overflow.as

Проблемы Stack-overflow.as могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с Stack-overflow.as, или к вирусам / вредоносному ПО.

Более конкретно, данные ошибки stack-overflow.as могут быть вызваны следующими причинами:

  • Поврежденные ключи реестра Windows, связанные с stack-overflow.as / LXFDVD118.
  • Вирус или вредоносное ПО, которые повредили файл stack-overflow.as или связанные с LXFDVD118 программные файлы.
  • Другая программа злонамеренно или по ошибке удалила файлы, связанные с stack-overflow.as.
  • Другая программа находится в конфликте с LXFDVD118 и его общими файлами ссылок.
  • Поврежденная загрузка или неполная установка программного обеспечения LXFDVD118.

Как исправить ошибки в Stack-overflow.as

Ниже описана последовательность действий по устранению ошибок, призванная решить проблемы stack-overflow.as. Данная последовательность приведена в порядке от простого к сложному и от менее затратного по времени к более затратному, поэтому мы настоятельно рекомендуем следовать данной инструкции по порядку, чтобы избежать ненужных затрат времени и усилий.

Пожалуйста, учтите: Нажмите на изображение [ ] , чтобы развернуть инструкции по устранению проблем по каждому из шагов ниже. Вы также можете использовать изображение [ ], чтобы скрывать инструкции по мере их выполнения.

Шаг 1: Исправить записи реестра, связанные с LXFDVD118

Иногда ошибки stack-overflow.as и другие системные ошибки AS могут быть связаны с проблемами в реестре Windows. Несколько программ может использовать файл stack-overflow.as, но когда эти программы удалены или изменены, иногда остаются «осиротевшие» (ошибочные) записи реестра AS.

В принципе, это означает, что в то время как фактическая путь к файлу мог быть изменен, его неправильное бывшее расположение до сих пор записано в реестре Windows. Когда Windows пытается найти файл по этой некорректной ссылке (на расположение файлов на вашем компьютере), может возникнуть ошибка stack-overflow.as. Кроме того, заражение вредоносным ПО могло повредить записи реестра, связанные с LXFDVD118. Таким образом, эти поврежденные записи реестра AS необходимо исправить, чтобы устранить проблему в корне.

Редактирование реестра Windows вручную с целью удаления содержащих ошибки ключей stack-overflow.as не рекомендуется, если вы не являетесь специалистом по обслуживанию ПК. Ошибки, допущенные при редактировании реестра, могут привести к неработоспособности вашего ПК и нанести непоправимый ущерб вашей операционной системе. На самом деле, даже одна запятая, поставленная не в том месте, может воспрепятствовать загрузке компьютера!

В связи с подобным риском мы настоятельно рекомендуем использовать надежные инструменты очистки реестра, такие как WinThruster (разработанный Microsoft Gold Certified Partner), чтобы просканировать и исправить любые проблемы, связанные с stack-overflow.as. Используя очистку реестра, вы сможете автоматизировать процесс поиска поврежденных записей реестра, ссылок на отсутствующие файлы (например, вызывающих ошибку stack-overflow.as) и нерабочих ссылок внутри реестра. Перед каждым сканированием автоматически создается резервная копия, позволяющая отменить любые изменения одним кликом и защищающая вас от возможного повреждения компьютера. Самое приятное, что устранение ошибок реестра может резко повысить скорость и производительность системы.

Предупреждение: Если вы не являетесь опытным пользователем ПК, мы НЕ рекомендуем редактирование реестра Windows вручную. Некорректное использование Редактора реестра может привести к серьезным проблемам и потребовать переустановки Windows. Мы не гарантируем, что неполадки, являющиеся результатом неправильного использования Редактора реестра, могут быть устранены. Вы пользуетесь Редактором реестра на свой страх и риск.

Перед тем, как вручную восстанавливать реестр Windows, необходимо создать резервную копию, экспортировав часть реестра, связанную с stack-overflow.as (например, LXFDVD118):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «regedit» и нажмите ENTER.
  8. В Редакторе реестра выберите ключ, связанный с stack-overflow.as (например, LXFDVD118), для которого требуется создать резервную копию.
  9. В меню Файл выберите Экспорт.
  10. В списке Сохранить в выберите папку, в которую вы хотите сохранить резервную копию ключа LXFDVD118.
  11. В поле Имя файла введите название файла резервной копии, например «LXFDVD118 резервная копия».
  12. Убедитесь, что в поле Диапазон экспорта выбрано значение Выбранная ветвь.
  13. Нажмите Сохранить.
  14. Файл будет сохранен с расширением .reg.
  15. Теперь у вас есть резервная копия записи реестра, связанной с stack-overflow.as.

Следующие шаги при ручном редактировании реестра не будут описаны в данной статье, так как с большой вероятностью могут привести к повреждению вашей системы. Если вы хотите получить больше информации о редактировании реестра вручную, пожалуйста, ознакомьтесь со ссылками ниже.

Мы не несем никакой ответственности за результаты действий, совершенных по инструкции, приведенной ниже — вы выполняете эти задачи на свой ​​страх и риск.

Что на самом деле вызывает ошибку переполнения стека? [дубликат]

этот вопрос уже есть ответ здесь:

  • Что такое StackOverflowError? 13 ответов

Я искал везде и не могу найти твердый ответ. Согласно документации, Java бросает java.ленг.StackOverflowError ошибка при следующих обстоятельствах:

возникает, когда стек переполнение происходит, потому что приложение повторяется слишком глубоко.

но это вызывает два вопроса:

  • а разве нет других способов для переполнения стека происходит не только через рекурсию?
  • StackOverflowError происходит до того, как JVM фактически переполняет стек или после?

чтобы уточнить второй вопрос:

когда Java бросает StackOverflowError, вы можете с уверенностью предположить, что стек не сделал написать в кучу? Если вы уменьшите размер стека или кучи в try / catch на функцию, которая вызывает переполнение стека, вы можете продолжить работу? Это где-нибудь задокументировано?

ответы, которые я не ищу:

  • StackOverflow происходит из-за плохой рекурсии.
  • StackOverflow происходит, когда куча встречается со стеком.

10 ответов:

кажется, вы думаете, что a ошибка stackoverflow похоже на исключение переполнения буфера в собственных программах, когда существует риск записи в память, которая не была выделена для буфера, и, таким образом, повредить некоторые другие места памяти. Это не так.

JVM имеет заданную память, выделенную для каждого стека каждого потока, и если попытка вызвать метод происходит, чтобы заполнить эту память, JVM выдает ошибку. Как это сделать, если вы были попытка записи по индексу N массива длины N. никакого повреждения памяти произойти не может. Стек не может писать в кучу.

StackOverflowError для стека-это то же, что OutOfMemoryError для кучи: он просто сигнализирует, что больше нет доступной памяти.

описание ошибок виртуальной машины (§6.3)

StackOverflowError: реализация виртуальной машины Java исчерпала пространство стека для a поток, как правило, потому, что поток выполняет неограниченное количество рекурсивных вызовов в результате ошибки в выполняющейся программе.

а разве нет других способов для переполнения стека происходит не только через рекурсию?

конечно. Просто продолжайте вызывать методы, никогда не возвращаясь. Вам понадобится много методов, если вы не позволите рекурсии. На самом деле, это не имеет значения: кадр стека-это кадр стека, независимо от того, является ли он одним из рекурсивных методов или нет.

ответ на ваш второй вопрос: stackoverflow обнаруживается, когда JVM пытается выделите кадр стека для следующего вызова, и находит это невозможно. Таким образом, ничего не будет перезаписано.

нет ли других способов для переполнения стека, не только через рекурсию?

Вызов принят 🙂 StackOverflowError без рекурсии (вызов не удалось, см. комментарии):

компиляция со стандартом javac Test.java и запускать с java -Xss104k Test 2> out . После этого, more out скажу вам:

вторая попытка.

теперь идея еще проще. Примитивы в Java могут храниться на стек. Итак, давайте объявим много двойников, как double a1,a2,a3. . Этот скрипт может писать, компилировать и запускать код о нас:

и. Я получил что-то неожиданное:

это 100% повторяется. Это связано с вашим вторым вопросом:

StackOverflowError происходит до того, как JVM фактически переполняется стек или после?

Итак, в случае OpenJDK 20.0-b12 мы можем видеть, что JVM во-первых взорванный. Но это похоже на ошибку, может быть, кто-то может подтвердить это в комментариях, пожалуйста, потому что я не уверен. Должен ли я сообщить об этом? Может быть, это уже исправлено в какой-то новой версии. Согласно ссылка на спецификацию JVM (дан JB Nizet в комментарии) JVM должен бросить StackOverflowError , не умирают:

если вычисление в потоке требует большей виртуальной машины Java стек, чем разрешено, виртуальная машина Java бросает StackOverflowError.

третья попытка.

мы хотим создать новый

наиболее распространенной причиной StackOverFlowError является чрезмерно глубокая или бесконечная рекурсия.

здесь two области в памяти куча и стек. Элемент stack memory используется для хранения локальных переменных и вызов функции, в то время как heap memory используется для хранения объектов в Java.

если в стеке не осталось памяти для хранения вызова функции или локальной переменной, JVM бросит java.lang.StackOverFlowError

в то время как если там нет больше места кучи для создания объекта, JVM будет бросать java.lang.OutOfMemoryError

нет никакого «StackOverFlowException». Вы имеете в виду»StackOverFlowError».

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

когда именно возникает ошибка ? — Когда вы вызываете метод и JVM проверяет, достаточно ли памяти для этого. Конечно, ошибка выдается, если это невозможно.

  • нет, это единственный способ получить эту ошибку: получение ваш стек полный. Но не только через рекурсию, но и вызывая методы, которые бесконечно вызывают другие методы. Это очень специфическая ошибка, так что нет.
  • он выбрасывается до того, как стек заполнен, именно тогда, когда вы его проверяете. Куда бы вы поместили данные, если нет свободного места ? Перекрывая других ? Неа.

есть два основных места, что вещи могут храниться в Java. Первый-это куча, которая используется для динамически выделяемых объектов. new .

кроме того, каждый поток получает свой собственный стек, и он получает объем памяти, выделенной для этого стека.

при вызове метода данные помещаются в стек для записи вызова метода, передаваемых параметров и выделяемых локальных переменных. Метод с пятью локальными переменными и тремя параметры будут использовать больше пространства стека, чем a void doStuff() метод без локальных переменных.

основные преимущества стека заключаются в том, что нет фрагментации памяти, все для одного вызова метода выделяется в верхней части стека, и что возврат из методов прост. Чтобы вернуться из метода, вы просто разматываете стек обратно к предыдущему методу, устанавливаете любое значение, необходимое для возвращаемого значения, и все готово.

потому что стек имеет фиксированный размер на поток, (обратите внимание, что спецификация Java не требует фиксированного размера, но большинство реализаций JVM на момент написания используют фиксированный размер) и поскольку пространство в стеке необходимо всякий раз, когда вы делаете вызов метода, надеюсь, теперь должно быть ясно, почему он может закончиться и что может привести к его завершению. Существует не фиксированное количество вызовов метода, нет ничего конкретного о рекурсии, вы получаете исключение, которое вы пытаетесь вызвать метод и не хватает памяти.

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

StackOverflowError возникает из-за приложение рекурсивно вызывает слишком глубоко (это не ответ, который вы ожидаете).

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

но неосознанно кодируя одну строку или две строки, которые вызывают StackOverflowError понятно, и JVM бросает это, и мы можем исправить это мгновенно. здесь это мой ответ с изображением для некоторых других вопросов.

StackOverflow происходит, когда выполняется вызов функции и стек заполнен.

Так же, как ArrayOutOfBoundException. Он не может ничего испортить, на самом деле его очень легко поймать и восстановить.

обычно это происходит в результате неконтролируемой рекурсии, но это также может быть вызвано просто очень глубоким вызовом стека функций.

в c# вы можете достичь переполнения стека другим способом, ошибочно определив свойства объекта. Например :

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

переполнение стека часто происходит также из-за нехватки памяти или при использовании управляемых языков, потому что ваш менеджер языков (CLR, JRE) обнаружит, что ваш код застрял в бесконечном петля.

но это вызывает два вопроса:

  1. а разве нет других способов для переполнения стека происходит не только через рекурсию?
  2. StackOverflowError происходит до того, как JVM фактически переполняет стек или после?

    Это также может произойти, когда мы выделяем размер больше, чем предел стека (например. int x[10000000]; ).

    ответ на второй

    каждый поток имеет свой собственный стек, который содержит фрейм для каждого метода, выполняющегося в этом потоке. Таким образом, текущий выполняемый метод находится в верхней части стека. Новый фрейм создается и добавляется (выталкивается) в верхнюю часть стека для каждого вызова метода. Кадр удаляется (выскакивает), когда метод возвращает нормально или если во время вызова метода возникает неперехваченное исключение. Стек не управляется напрямую, за исключением объектов push и pop frame, а также поэтому объекты фрейма могут быть выделены в куче, и память не должна быть непрерывной.

    поэтому, рассматривая стек в потоке, мы можем сделать вывод.

    стек может быть динамического или фиксированного размера. Если поток требует большего стека, чем разрешено StackOverflowError бросается. Если поток требует нового кадра и недостаточно памяти для его выделения, то OutOfMemoryError бросается.

    Почему ошибки stackoverflow хаотичны?

    эта простая программа C редко завершается на той же глубине вызова:

    какие могут быть причины этого хаотического поведения?

    Я использую fedora (16gib ram, размер стека 8192) и скомпилирован с помощью cc без каких-либо опций.

    редактировать

    • Я знаю, что эта программа будет бросать stackoverflow
    • Я знаю, что включение некоторых оптимизаций компилятора изменит поведение и что программа достигнет переполнения integer.
    • Я знаю, что это неопределенное поведение, цель этого вопроса-понять/сделать обзор конкретной реализации поведения, которое может объяснить то, что мы наблюдаем здесь.

    вопрос больше, учитывая, что в Linux размер стека потоков фиксирован и задан ulimit -s , что повлияет на доступный размер стека, так что stackoverflow не всегда происходит при одном вызове глубина?

    Изменить 2 @BlueMoon всегда видит один и тот же вывод на своих CentOS, в то время как на моей Fedora со стеком 8M я вижу разные выходы (последнее печатное целое число 261892 или 261845, или 261826, или . )

    7 ответов

    измените вызов printf на:

    это заставляет gcc поместить rec в стек и дает вам его адрес, который является хорошим показателем того, что происходит с указателем стека.

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

    Первое, что нужно отметить, это то, что адрес стека всегда заканчивается на 78c или 79c . Почему так? Мы должны разбиться. при пересечении границы страницы страницы имеют длину 0x1000 байт, и каждая функция съедает 0x20 байт стека, поэтому адрес должен заканчиваться 00X или 01X. Но, глядя на это ближе, Мы разбиваемся в libc. Таким образом, переполнение стека происходит где-то внутри libc, из этого мы можем заключить, что вызов printf и всего остального, что он вызывает, требует по крайней мере 0x78c = 1932 (возможно, плюс X*4096) байтов стека для работы.

    второй вопрос-почему разное количество итераций для достижения конец стопки? Намек в том, что адреса, которые мы получаем разные при каждом запуске программы.

    положение стека в памяти рандомизированы. Это делается для предотвращения целого семейства эксплойтов переполнения буфера. Но поскольку выделение памяти, особенно на этом уровне, может быть выполнено только на нескольких страницах (4096 байт), все начальные указатели стека будут выровнены по 0x1000. Это уменьшило бы количество случайных битов в рандомизированном адресе стека, поэтому дополнительная случайность добавляется просто потерей случайного количества байтов в верхней части стека.

    операционная система может учитывать только объем используемой памяти, включая ограничение на стек, на целых страницах. Поэтому, хотя стек начинается со случайного адреса, последний доступный адрес в стеке всегда будет адресом, заканчивающимся на 0xfff.

    короткий ответ: увеличить количество случайности в рандомизированном макете памяти кучу байтов на верхняя часть стека преднамеренно теряется, но конец стека должен заканчиваться на границе страницы.

    У вас не будет такого же поведения между исполнениями, потому что это зависит от текущей доступной памяти. Чем больше памяти у вас есть, тем дальше вы пойдете в этой рекурсивной функции.

    ваша программа работает бесконечно, поскольку в вашей рекурсивной функции нет базового условия. Стек будет непрерывно расти при каждом вызове функции и приведет к переполнению стека.
    Если бы это был случай хвост-рекурсия оптимизация (вариант -O2 ), то переполнение стека произойдет обязательно. Его вызывают неопределенное поведение.

    что повлияет на доступный размер стека, чтобы stackoverflow не всегда происходил при одном вызове глубина?

    когда происходит переполнение стека, он вызывает неопределенное поведение. Ничего нельзя сказать о результате в данном случае.

    ваш рекурсивный вызов не обязательно вызовет неопределенное поведение из-за stackoverflow (но будет из-за переполнения целого числа) на практике. Оптимизирующий компилятор может просто превратить ваш компилятор в бесконечный «цикл» с инструкцией перехода:

    обратите внимание, что это вызовет неопределено поведение так как он будет переполнение rec (подписанное переполнение int-UB). Например, если rec имеет unsigned int, например, тогда код действительный и теоретически, должен работать вечно.

    приведенный выше код может вызвать две проблемы:

    • Переполнение Стека.
    • переполнение целого числа.

    Переполнение Стека: когда вызывается рекурсивная функция, вся ее переменная нажимается на стек вызовов включая return адрес. Поскольку нет базового условия, которое завершит рекурсия и память стека ограничена, стек будет исчерпан в результате Переполнение Стека исключения. Стек вызовов может состоять из ограниченного объема адресного пространства, часто определяемого в начале программы. Размер стека вызовов зависит от многих факторов, включая язык программирования, машина архитектуры, многопоточность, и сумму доступной памяти. Когда программа пытается использовать больше пространства, чем доступно в стеке вызовов (то есть, когда он пытается доступ к памяти за пределами стека вызовов, который по существу является переполнением буфера), стек, как говорят, переполняется, что обычно приводит к сбою программы.

    обратите внимание, что каждый раз, когда функция выходит/возвращается, все переменные, помещенные в стек этой функцией, освобождаются (то есть удаляются). Как только переменная стека освобождается, эта область памяти становится доступной для других переменных стека. Но для рекурсивной функции обратный адрес все еще находится в стеке пока рекурсия не закончится. Кроме того, автоматические локальные переменные выделяются как единый блок, а указатель стека достаточно продвинут, чтобы учесть сумму их размеров. Вы, возможно, заинтересованы в рекурсивный стек в C.

    переполнение целого числа: как каждый рекурсивный вызов recursive() с шагом rec by 1 , есть шанс, что Переполнение Целых Чисел может произойти. Для этого ваша машина должна иметь огромную память стека как диапазон целое число без знака: от 0 до 4,294,967,295. См. ссылку здесь.

    существует разрыв между сегментом стека и сегмента кучи. Теперь, поскольку размер кучи является переменным (продолжает меняться во время выполнения), поэтому степень, в которой ваш стек будет расти до возникновения stackoverflow, также является переменной, и это причина, по которой ваша программа редко завершается с той же глубиной вызова.

    когда процесс загружает программу из исполняемого файла, обычно он выделяет области памяти для кода, стека, кучи, инициализированных и неинициализированных данных.

    выделенное пространство стека обычно не так велико (возможно, 10 мегабайт), и поэтому вы могли бы представить, что физическое истощение ОЗУ не будет проблемой в современной системе, и переполнение стека всегда будет происходить на одной и той же глубине рекурсии.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×