Сбои памяти при вызове нового - PullRequest
0 голосов
/ 02 декабря 2010

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

Я пишу академическую ОС для домашнего задания (начос, если вы должны знать), и самое последнее, что мне нужно было сделать, это реализовать взаимноеисключение в основной карте.Для этого я добавил блокировку и переменную условия на страницу в эмулируемую основную память.После этого я запускаю свой код и через один вызов обработчик исключений (в совершенно другом каталоге, отличном от базовой карты) просто отлично, но во второй раз вызывается функция, которую я получаю и выдает ошибку при следующем вызове: r=new Lock("read"); ион выглядит так:

*** glibc detected *** /home/some_other_directories/workspace/nachos3_repo/vm/nachos: malloc(): memory corruption (fast): 0x0805fe20 ***

Просто чтобы посмотреть, как он себя ведет, я изменил распределение этой блокировки, чтобы оно было внешним в моем системном файле (там много глобальных внешних ссылок), и после этого я получаюошибка сегмента при вызове fout.open("old.txt");, которую я проследил назад через стек, чтобы быть в пределах вызова к malloc при вызове new.

Мое лучшее предположение, что моя куча становится большой, но я неконечно, если это так или как справиться с этим, если это так.Кто-нибудь может пролить свет на эту проблему?

1 Ответ

1 голос
/ 02 декабря 2010

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

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