![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
l0ser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.4.2010 Где: Подмосковье Репутация: нет Всего: нет |
Преамбула: написал консольную програмульку в Visual C++ 6.0 для игры в реверси. Оценка каждого из возможных ходов сделана рекурсивной функцией на нужную глубину. На дне рекурсии позиция оценивается по количеству очков и по «стоимости» ячейки, куда делается ход.
Проблема: заметил, что при глубине рекурсии от 6 иногда начинаются глюки – портится доска, находятся ложные ходы. Вылизывал программу, но так ничего и не добился. Поскольку я программирую «индийским» методом, рекурсия делает кучу вызовов new и delete. Главный вопрос: возможны ли именно в VC++ 6 проблемы с памятью при интенсивном выделении/освобождении? Или всё-таки искать ошибку у себя? Второстепенный вопрос: чтобы выяснить самым варварским и антигуманным способом, моя ли это ошибка, ставил Мандриву. В ней программа отказалась компилироваться (даже под рутом) из-за непонятных ругательств в адрес любых операторов вывода – от printf до cout. Посоветуйте нубский дистрибутив линукса с компилятором. ![]() Могу приложить исходники. Это сообщение отредактировал(а) l0ser - 14.4.2010, 03:55 |
|||
|
||||
Coder |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
И при чем тут Мандрива....
Хорошая идея! |
|||
|
||||
l0ser |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.4.2010 Где: Подмосковье Репутация: нет Всего: нет |
Мандрива ни при чём. ![]() ![]() Прикладываю зипчик исходников. Это сообщение отредактировал(а) l0ser - 14.4.2010, 04:23 Присоединённый файл ( Кол-во скачиваний: 18 ) ![]() |
||||
|
|||||
Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: нет Всего: 26 |
![]() ![]() -------------------- ????? ??, ??????? ?????. ![]() |
|||
|
||||
l0ser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.4.2010 Где: Подмосковье Репутация: нет Всего: нет |
Просто уж больно дофига там new-delete происходит. Вот я и засомневался. |
|||
|
||||
Coder |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
Ну и пусть происходят. Судя по описанию проблемы ты просто коцаешь чужую память. Исходник лень весь смотреть.... давай сюда только рекурсивную функцию Это сообщение отредактировал(а) Coder - 14.4.2010, 08:52 |
|||
|
||||
l0ser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.4.2010 Где: Подмосковье Репутация: нет Всего: нет |
предполагается, что противник всегда выбирает «наилучший» ход Это сообщение отредактировал(а) l0ser - 14.4.2010, 09:03 |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 7 Всего: 49 |
По описанию это больше напоминает не проблемы с выделением/освобождением памяти, а попытки в каком-то месте вылезти за границы массива. Попробуйте проверить это.
Что касается второго вопроса - практически любой дистрибутив. Проблема не в Мандриве, проблема в кривом VC++, в котором слишком много отклонений от стандарта языка. |
|||
|
||||
l0ser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.4.2010 Где: Подмосковье Репутация: нет Всего: нет |
Скорее дело в моих кривых руках. Ибо я менял всячески операторы вывода, и всегда компилятор gcc матерился непонятными словами именно на них, спокойно переваривая все остальное. Да и потом, никаких специфичных для Виндофс функций я не вызывал. Попробую помедитировать над границами... но если ошибка такова, то уж больно редко она происходит. ![]() |
|||
|
||||
Coder |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
А виндовс сама специфична ![]() А вот смотри. Может дело тут:
MAX_POSS = 20 а цикл выполняется 64 раза |
|||
|
||||
l0ser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.4.2010 Где: Подмосковье Репутация: нет Всего: нет |
Не. :( Я там прикидывал – в реверси максимум 16 возможных ходов было, специально такую позицию искал. Вообще, можно примерно 28 выжать, но такую позицию из начальной не получишь (вначале по две фишки крест-накрест стоят). |
|||
|
||||
assasincore |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.4.2010 Репутация: нет Всего: нет |
Ты что используеш много памяти? гигабйт? два? хотя бы 100 метром?
breakpoint -> task manager/ process explorer. Короче у тя бага... ТВОЯ! А не компилятора... отладчик в зубы и... |
|||
|
||||
l0ser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.4.2010 Где: Подмосковье Репутация: нет Всего: нет |
Спасибо за вежливый и содержательный ответ! ![]() Попрошу удалить тему. |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 7 Всего: 49 |
В C++ есть такие полезные штуки - "пространства имен", которые существенны в том числе и для операторов потокового ввода-вывода. Соответственно, корректная программа на С++ должна либо где-нибудь в начале содержать using namespace std;, либо, что более правильно, содержать явную конкретизацию области видимости (например, вида std::cout << "Ляляля" << std::endl;).
Она будет вылезать только в том случае, если при наложении кусков разных массивов происходит "неправильная" перезапись данных в каком-то массиве. Это совсем не всегда может случаться. Возможно, конечно, что дело не в этом, но подобные грабли для C++ действительно стандартны, и видимые проявления похожи. |
|||
|
||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
Тема перенесена!
Это сообщение отредактировал(а) En_t_end - 15.4.2010, 07:21 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |