![]() |
|
|
![]()
|
|
| Eugene82 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
Вопрос пионера к гуру.
Подскажите, почему не работает следующий код:
но работает код:
Если можете объяснить в 2-х словах буду очень признателен. Если можете сказать, где про это можно прочитать тоже буду благодарен. P.S. Вопрос имеет только принципиальную важность - хочу понять логику программирования в Билдере. |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
у тебя что, 5-й билдер? ( или даже раньше )
или оптимизация включена... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Vyacheslav |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Почему это происходит объяснить можно. А вот глюк это или нет решайте сами.
Касается это пропертей AnsiString, доступ к которым осуществляется через методы
Беря значение Edit->Text Вы фактически вызывате метод GetText(), который возращает временную переменную AnsiString, которая является копией FText. Если Вы выполняете
То временная переменная копируе в str, а сама уничтожается. Но это уже не важно, поскольку нужное нам значение находится в str и буфер, где хранится реально строка не будет освобожден(сработает механизм подсчета ссылок) Если записать так
то мы получим адрес буфера временной переменной, которая в следующий момент будет уничтожена и буферв скорее всего окажется какой либо мусор Надеюсь механизм понятен. Кстати примерно по той же причине не будут работать выражения типа
Добавлено @ 10:34 Кстати все сказанное не относится к AnsiString провпертям, доступ которых организовани на прямую без методов
-------------------- С уважением, Вячеслав Ермолаев |
||||||||||
|
|||||||||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
Мусор не мусор, а код выше как ни странно корректно работает если в строке кратно 4 символам.
т.е строка 1234 выдает 1234 если строка 12345 выдает 1234 строка 12345678 выдает 12345678, строка 123456789 выдает 12345678 и т.д. с какого то момента выдает правильно при кратности 2, в общем глюк это.... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Да дело в том, что буфер будет освобождается, но не обнулен. И там вы может с разной степенью вероятности даже прочитать полностью требуемое значение, а иногда, чаще всего часть буфера уже затирается. Вот и ваши 1234 вместо 12345. Механизм я описал
Добавлено @ 11:12 Проверяйте Ваши 12345
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Eugene82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 30.5.2005 Где: г. Ростов-на-Дону Репутация: нет Всего: нет |
2Vyacheslav Спасибо, очень доходчиво объяснил! Теперь я понимаю почему при запуске это программы в режиме трассировки она выполнялась(
2_hunter
Билдер у меня Шестой, а проблема получается та же что и в одной моей более ранней теме: http://forum.vingrad.ru/index.php?showtopi...15entry438887 -------------------------- Короче с буфером шутки плохи. ...И придётся использовать больше переменных при написании, чтобы значения временных переменных не затирались раньше времени Это сообщение отредактировал(а) Eugene82 - 15.7.2005, 14:00 |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |