|
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 5
|
||||||
Ошибка в рекурсивной функции, связанная с использованием "чужой" памяти.24.03.2010, 15:04. Показов 1082. Ответов 8
Метки нет (Все метки)
Здравствуйте!
Я столкнулся с одной проблемой при реализации некоторой задачи. Мой проект - программа, которая должна показывать все методы прохода шахматного коня по доске N*M, при том, что конь должен побывать на каждой клетке только один раз. Предлагалось реализовать задачу при помощи рекурсивной функции. Программа написана на C. Программу я написал, и она работает почти для всех досок. Почти... При запуске ее на доске 6*6 она через некоторое время обнуляет глобальную переменную (VAR), отвечающую за кол-во вариантов. Полагаю, что функция "залезает" не в свою память, но уже месяц не могу найти где... Прошу помочь. Сюда я выложу лишь часть кода, отвечающую за рекурсивную функцию, во вложениях будут все файлы, относящиеся к программе.
0
|
||||||
| 24.03.2010, 15:04 | |
|
Ответы с готовыми решениями:
8
Ошибка в функции, связанная с использованием памяти Разработать программу согласно алгоритму с использованием рекурсивной функции и без использования рекурсивной
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 24.03.2010, 16:28 | |
|
закомментируй код нормально.
я в этом алгоритме ничего не понимаю. кроме того, в приложении код не тот, что выложен. у меня при VAR>100000 идет вылет с сообщением об ошибке доступа к памяти на строке *(arr + 16 * 16 * VAR + i * 16 + j)=crr[i][j];
0
|
|
|
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 5
|
||||||
| 24.03.2010, 16:46 [ТС] | ||||||
0
|
||||||
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|||||||
| 24.03.2010, 18:42 | |||||||
|
в этом коде НЕТ строки, которая вызывает ошибку доступа к памяти. а в приложенном проекте на MSVS 6.0 она ЕСТЬ. а вообще - код немного индусский... ![]() какие-то странные выделения памяти с фантастической размерностью... вот смотри, я прикинул, как это должно выглядеть:
итого, комментариев получилось едва ли не больше, чем кода.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 5
|
|
| 24.03.2010, 19:21 [ТС] | |
|
Спасибо.
А по поводу моего кода можете сказать, чем может быть вызвана ошибка, или там все-таки сам черт ногу сломит? + я не знаю, что такое список, и как с ним работать... Можете показать реализацию через malloc-realloc (просто я не совсем уверен, что все делаю верно)?
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|||||||||||
| 24.03.2010, 19:31 | |||||||||||
|
еще раз покурил твой код.
![]() у тебя основной массив - на 100000 досок:
вот и вылазит обращение к данным за пределы этого массива. Добавлено через 2 минуты со списками, извини, только завтра. у меня уже ночь, ребенка скандалит... часов через 12 сделаю пример работы с двунаправленным списком.
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 5
|
|
| 24.03.2010, 19:43 [ТС] | |
|
Ну там вроде как k==M*N+1 - это и есть индикатор того, что доска полностью забита. То есть у нас 36 клеток и последний экземпляр функции захочет найти место, куда можно будет сделать 37 ход. Ну вот тут и ставится ограничение, что, мол, пора бы место в памяти расширять и тому подобное.
Я чего-то недопонимаю?
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
||
| 25.03.2010, 10:14 | ||
![]() извини, у меня завал, со списками сам разбирайся, если все-же понадобятся. в приложении твой проект, немного причесанный. у меня в таком виде работает без глюков. расчет, по крайней мере. отображение уже сам настраивай. я вынес функцию копирования доски, изменил выделение памяти под размер N*M, вместо 16*16, и убрал копирование текущей доски в стек при каждом вызове move(). и еще немного по мелочи. сам посмотришь... делал логи - все нормально посчиталось. возможно, ты просто забивал весь стек этими досками. ![]() у процесса по-умолчанию всего 2Mb памяти на стек выделено, а у тебя получалось... примерно 1MB только досок в стеке, при размере массива 16*16 и NM = 8. а еще там должны быть и другие локальные переменные, адреса функций и т.д.
0
|
||
|
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 5
|
|
| 25.03.2010, 14:03 [ТС] | |
|
Блин, только сейчас обнаружил, что сюда залил старую версию, самую баговую. Сорри.
Спасибо большое, сейчас потестю. Добавлено через 1 час 59 минут Patch, не знаю, как и благодарить, все работает, спасибо тебе огромное за потраченное время!
0
|
|
| 25.03.2010, 14:03 | |
|
Помогаю со студенческими работами здесь
9
Вычислить значение функции, разложив f(x) в ряд Тейлора. Разработать с использованием рекурсивной функции и без
алгоритм с использованием рекурсивной функции Работа с использованием рекурсивной функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|