gxachaturov: (Default)
[personal profile] gxachaturov
Наконец начал класть последние мазки на своего монстра, хромающего сразу на все лапы. Ну, думаю сейчас половлю остатних блох, и... Как бы не так.

Вылез StackOverflowException. При входе в какой-то конструктор. Че делать? Ну, ладно завтра на работе на компе с большей памятью погоняю. Но сегодня-то что делать?

Date: 26 May 2012 16:03 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Последный работающий код от неработающего отличается конструктором одного единственного нового класса, который я придумал для добавочной функционалности. До самой функциональности сейчас (в переделаной версии) дело не доходит: все падает в пустом конструкторе.

А старой версии, ошибка вела себя как ртутный шарик: когда в отладчике работаешь, то вываливется не там, когда без него. Плюс к тому, по разному в 2008 и 2010. И как при этом делить пополам?
Edited Date: 26 May 2012 16:04 (UTC)

Date: 26 May 2012 17:23 (UTC)
From: [identity profile] txtarunz.livejournal.com
То-есть, баг был всегда, просто проявлялся по разному?
Тогда и надо начать с самого верха.

Date: 26 May 2012 19:06 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Нет, я так не думаю. Баг появился вместе с созданием нового класса, соданного для новой цели.

Однако, в эти часы наметился прогресс:

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

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

Начинаю по существу инициализировать переменную Х

(подкласс_большого_класса Х; )

моего объекта-пустышки, вызываю конструктор:

Х=подкласс_большого_класса (параметры конструктора);

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

вставляю в эту програмку вспомогательную переменную того же подкласса:

подкласс_большого_класса темп(параметры конструктора);
Х=темп;

Результат: темп правильный, Х остался как был.

Date: 27 May 2012 02:32 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Новости с фронта.

У меня на компе 2 версии винда XP: 32 и 64х. В каждой своя версия VS 2008.

Предыдущие чудеса были на 32. Они исчезли без каких либо изменений в 64. Программа продвинулась значительно дальше. Проблем с новым конструктором никаких: прекрасно сработал. Никаких бяк из прошлого поста.

Но потом случилось новое чудо. Я в текущей версии объект нового класса и несколько старых засунул в один супер-класс. И работаю с глобалным объектом этого суперкласса, сделав старые функции его членами. Короче, нахожусь в функции А этого класса вызванной из глобалного объекта, выполняю функцию Б. 'this' из А виден и в прекрасном состоянии, вызываю функцию С того же класса. При входе - stack оверфло, и this перестает быть виден изнутри С.

При этом вызове не строится ничего, не работает ни один конструктор. Ни одной команды С не успевает выполнится.
Edited Date: 27 May 2012 02:34 (UTC)

Date: 27 May 2012 19:07 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Сейчас эффект в обеих (32 и 64) операционках стабильно одинаков, как он описан в предыдущем комменте для 64. И куда дальше делить пополам?

Для любопытствующих (интересно, кто из богов отвечает на небесах за программирование?), засунул прект в его текущем состоянии на http://newton.uam.mx/xgeorge/bicub_v_2008.rar.

Date: 28 May 2012 01:11 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Ага, детектив, так детектив. Буду поддерживать интригу до конца.

Родилась дикая идея: в этом подлом случае надо делить пополам не назад, а вперед.

Поделю-ка тот модуль, котором не сработала ни одна команда, и посмотрю что выйдет.

Date: 29 May 2012 02:13 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Ну что вам сказать, коллеги... Идея была продуктивна. Но дело не в этом. Найдя место, где все валилось, я сделал маленькое изменение, после чего эффект исчез.

Наверно я никогда не узнаю почему.

Ведь замена

cloud_of_ms_cl_in_3x3 *p_var;
p_var = new cloud_of_ms_cl_in_3x3(iii, jjj);
AT.CLD=*p_var;
delete p_var;

//AT.CLD= cloud_of_ms_cl_in_3x3(iii, jjj);

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

Это как если бы в детективе труп неожиданно бесследно сперли, а мы продолжаем искать убийцу.
Edited Date: 29 May 2012 02:23 (UTC)

Profile

gxachaturov: (Default)
gxachaturov

July 2025

S M T W T F S
   1 23 45
6789101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 8 July 2025 11:59
Powered by Dreamwidth Studios