Re[10]: все же обманул
От: hattab  
Дата: 27.03.12 06:34
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD> H>Зачем инкаешь TBytes? Поломаешь поинтер будет зяка-зяка


PD> А с чего это я его поломаю ? Прибавление числа к указателю его сдвигает, вот и все.


TBytes это не просто указатель. Это указатель на динамический массив, а динамические массивы это типы с управляемым временем жизни и поэтому имеют еще и заголовок (подробности в справке по словам Internal Data Formats) находящийся в отрицательных смещениях от указателя. При присваивании, изменении размера и удалении динамических массивов компилятор модифицирует поля заголовка. Из приведенного кода не понятно, что там за Buffer который присваивается Current, но понятно, что когда Current выйдет за пределы видимости, компилятор будет уменьшать счетчик ссылок на динамический массив (т.е. на Current) и в зависимости от мусора расположенного перед Current (ты ведь изменил указатель) может попытаться его удалить (будет эксепшен), а иначе просто испортит данные декрементом счетчика ссылок.
avalon 1.0rc3 build 428, zlib 1.2.3
Re[10]: вопрос по TMemoryStream
От: hattab  
Дата: 27.03.12 06:38
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR> PD>Сделал отдельный тест — работает. Вставляю код твой без изменения в программу — ERangeCheckError. Мистика.

JR> PD>Что-то с опциями ? Или влияет то, что у меня проект не консольный ? Хотя это уж совсем странно.

JR> ERangeCheckError, ЕМНИП, опциями отключается, в том числе и в свойствах проекта.


Заметать сор под ковер негодная практика
avalon 1.0rc3 build 428, zlib 1.2.3
Re[10]: вопрос по TMemoryStream
От: Pavel Dvorkin Россия  
Дата: 27.03.12 06:58
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Здравствуйте, Pavel Dvorkin, Вы писали:


JR>Я, признаться, недопонял, чем Вас MMF не устроил. Кроссплатформенность?


Вполне устроит, но я вроде и штатными средствами Delphi обошелся.
With best regards
Pavel Dvorkin
Re[11]: все же обманул
От: Pavel Dvorkin Россия  
Дата: 27.03.12 07:40
Оценка:
Здравствуйте, hattab, Вы писали:

H>TBytes это не просто указатель. Это указатель на динамический массив, а динамические массивы это типы с управляемым временем жизни и поэтому имеют еще и заголовок (подробности в справке по словам Internal Data Formats) находящийся в отрицательных смещениях от указателя. При присваивании, изменении размера и удалении динамических массивов компилятор модифицирует поля заголовка. Из приведенного кода не понятно, что там за Buffer который присваивается Current, но понятно, что когда Current выйдет за пределы видимости, компилятор будет уменьшать счетчик ссылок на динамический массив (т.е. на Current) и в зависимости от мусора расположенного перед Current (ты ведь изменил указатель) может попытаться его удалить (будет эксепшен), а иначе просто испортит данные декрементом счетчика ссылок.


Наверное, ты прав, хотя все это работало. Но лучше, действительно, не рисковать, тем более, что последний раз с Delphi я работал в прошлом тысячелетии , и все позабыл. А жаль. Хорошая, в общем, среда, к тому же нативная, на фоне всех этих управляемых сред.

Спасибо за помощб еще раз. В общем, вернул твой код , запретил ERangeCheckError — вроде читает.
With best regards
Pavel Dvorkin
Re: вопрос по TMemoryStream
От: Dimonka Верблюд  
Дата: 27.03.12 10:55
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Саму идею загружать 3Гб файл в ОП целиком прошу не обсуждать — не я такое писал.


А что, если не секрет, приходится подгружать?
Re[2]: вопрос по TMemoryStream
От: Pavel Dvorkin Россия  
Дата: 27.03.12 11:25
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>А что, если не секрет, приходится подгружать?


Файл
With best regards
Pavel Dvorkin
Re[10]: вопрос по TMemoryStream
От: hattab  
Дата: 27.03.12 12:35
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR> ERangeCheckError, ЕМНИП, опциями отключается, в том числе и в свойствах проекта.


Несмотря на минус смею настаивать на своем мнении. Этот эксепшн не просто так возникает, видимо есть тому причина. Лучше причину таки найти, а не "лечить" симптомы.
avalon 1.0rc3 build 428, zlib 1.2.3
Re[11]: вопрос по TMemoryStream
От: Jolly Roger  
Дата: 27.03.12 13:52
Оценка: +1
Здравствуйте, hattab, Вы писали:

H>Несмотря на минус смею настаивать на своем мнении. Этот эксепшн не просто так возникает, видимо есть тому причина. Лучше причину таки найти, а не "лечить" симптомы.


"Минус" не за само мнение, а за отсутствие его связи с моим постом. Павел спросил, как может быть, что поведение отличается в разных проектах. На этот вопрос я и отвечал, правильность или неправильность использования данной опции не обсуждалось вообще. Ваше же мнение сформулировано так, будто я предлагал сделать что-то нехорошее.
"Нормальные герои всегда идут в обход!"
Re[3]: вопрос по TMemoryStream
От: Dimonka Верблюд  
Дата: 27.03.12 15:31
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

D>>А что, если не секрет, приходится подгружать?


PD>Файл


Т.е. секрет? Обычно такие большие файлы за раз не грузят.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.