![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| makartetsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.1.2008 Репутация: нет Всего: нет |
Привет. Такая тема. (Использую рекурсивный растровый алгоритм flood fill.)
На строке if (Quasi.GetPixel(x,y).G > 0 && Quasi.GetPixel(x,y).R == 0 && Quasi.GetPixel(x,y).B == 0) происходит переполнение стека. Почему, не знаете? |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
makartetsky,
Вы используете рекурсию. По всей видимости, превышен максимальный уровень вложенности.
Не забыли ли Вы тут случайно скобки..? А вообще с рекурсией надо аккуратнее. Рекурсивные алгоритмы конечно проще составить, но затем лучше преобразовывать в обычные - многие рекурсивные алгоритмы можно переписать без рекурсии. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| makartetsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.1.2008 Репутация: нет Всего: нет |
Marcusmae, к сожалению, этот алгоритм относится к числу тех, которые нельзя переписать без рекурсии.
Что касается скобок - то нет, вроде не забыл. Может можно как то увеличить размер стека? |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Забудьте об этом. Для начало давайте в этом убедимся. Если что, логическое && имеет больший приоритет, чем неравенства. То есть скобки могли бы стоять так :
Нет?
Дааа? = Что-то я в этом сильно сомневаюсь! Распространяющийся из точки крестик ... над этим лучше подумать завтра, но предполагаю, что всё же он развёртывается в прямые циклы. Но ессесно это будет слегка другой алгоритм. -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| makartetsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.1.2008 Репутация: нет Всего: нет |
Насчет скобок. Всегда писал подобные условия без внутренних скобок - работало как надо. На досуге надо будет убедиться в этом путем побора примера.
Прошу заметить, не просто распространяющийся из точки крестик, а крестик, обходящий контуры, присутствующие на рисунке. А почему надо забыть про увеличение стека? |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Потому что не делают так. Вам никакого стека не хватит. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |