![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
Вопрос возник - как присвоить строке обычной(string) строку типа pchar? При прямом присвоении даёт ошибку.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Да ладно. Никакой ошибки нет. Проверьте сами
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
Есть ошибка.
Дело в том, что в pchar я читаю строку из tfilestream. Размер её известен - проходит всё нормально. После того, как присваиваю полученное значение строке, программа вылетает с acsess violation. Это сообщение отредактировал(а) Proxin - 6.6.2009, 16:04 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
код в студию . ИМХО, под PChar не выделена память. Добавлено через 40 секунд а может - PChar не завершена #0 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Ошибка в 17й строке. А вообще, подозреваю что память под строку в pchar не выделяется. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
все энды есть, сюда не пишу, ибо некритично. всё остальное, кроме этого, выводится правильно. строка завершена абсолютно точно. где может ускальзать память? или переполняться? делаю s.free один раз, перед ендом. Это сообщение отредактировал(а) Proxin - 6.6.2009, 17:52 |
|||
|
||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Как и предсказывалось - не выделена память. Названия переменных - ужость Нужно так (хотя не вижу в этом случае причин использовать PChar):
Во-первых, d - это указатель. Используя его "напрямую" в методе Read вы меняете область памяти, на которую он адресуется. А не данные, которые находятся в нем. Более того - первоначально d указывает на nil, то есть - никуда. Считав в него что-то вы передвигаете указатель в неизвестность. И - само собой - при попытке вывода содержимого неизвестности возникает AV. Добавлено через 28 секунд Ну и не забыть после использования сделать
|
||||
|
|||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
Почему-то не помогает.
Получается пусто, в d. А как вы предлагаете со строками работать? При чтении в строковой тип выскакивает AV. UPD: Разобрался. Оказывается, нужно было
Спасибо вам. А, вообще - где можно почитать о чтении различных типов данных с потока? Это сообщение отредактировал(а) Proxin - 6.6.2009, 19:16 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
ага, обшибся PChar и тому подобные переменные - указатели предполагают, что программист САМ заботится о выделении для них памяти и ее освобождении. При работе с указателями и первое и второе на начальных этапах (а бывает и не на начальных) вызывает трудности. То одно забудешь и выскочит AV, то второе и будут утечки памяти. Если есть возможность (а в приведенном вами коде /именно приведенном, что дальше - я не знаю/ она есть), лучше воспользоваться string-ом. Бо в этом случае освобождение памяти компилятор возьмет на себя. Пример:
Это сообщение отредактировал(а) kami - 6.6.2009, 20:21 |
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
А. Понятно. Спасибо.
Всё-таки, вы не знаете, где можно почитать о чтении с потока - конкретно интересует тип float - и как потом преобразовать его в строку, и чтение изображения - загрузить в пикчебокс? Кода конкретного не прошу, есть ли какие туториалы по этим темам - а то ничего так и не нашёл, по Сети. Это сообщение отредактировал(а) Proxin - 6.6.2009, 21:24 |
|||
|
||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Про потоки можно дать ссылку на такую статью:
http://forum.vingrad.ru/articles/topic-211911.html Можно дать даже ссылку на мою статью о TReader/TWriter, которые упрощают немного ввод данных в поток... http://forum.vingrad.ru/forum/topic-250409.html Но толку мне кажется не будет. Proxin, Вам следует почитать, как мне кажется, какую нибудь книгу для начинающих где рассказывается про различные типы данных. И еще, ознакомьтесь: Правила форума: http://forum.vingrad.ru/index.php?act=boardrules Пункт №10. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |