![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
IUnknown |
![]()
Сообщение
#21
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Что я делаю не так. Хм... Как бы, не надо читать данные туда, где находится сам указатель. Надо читать туда, куда он указывает:BlockRead(f,b^,ser);Ты же читал прямо в указатель (и в смежные с ним переменные), разумеется все портил к чертям собачьим, а потом еще и вызывал FreeMem неизвестно какой области (кто знает, что там было в файле, и куда теперь указывают b и p). Еще скажи спасибо, что получаешь "Invalid pointer operation", могло бы по-тихому что-то там освободить, и ты б не узнал, что делаешь что-то не так... P.S. С записью через BlockWrite - та же петрушка: передавай ей сам буфер, т.е., разыменованный указатель. Да, а кто будет освобождать память после окончательного завершения копирования? Сообщение отредактировано: IUnknown - 26.05.2011 18:03 |
Krjuger |
![]()
Сообщение
#22
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Я пробовал мнооого вариантов в одном из них мой файлик освободился так,что туда 930 мегабайт записалось)))Лан щас дорвусь до компа попробую.
Нечто подолное я видел,но там была связка вида
|
Krjuger |
![]()
Сообщение
#23
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Так,я совсем запутался.У меня есть b и p ,указатели на массивы байтов,выделить мне память надо для самих массивов так?Если да,то проведя анолонию с предыдущими комметариями я должен вызвать GetMem от разименованного указателя GetMem(b^,ser);
Но сделав это я при компиляции получаю .Poiter variable expected. |
IUnknown |
![]()
Сообщение
#24
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Если да,то проведя анолонию с предыдущими комметариями я должен вызвать GetMem от разименованного указателя GetMem(b^,ser); Нет... Погоди, ты меня тоже запутал...Значит, так: выделяешь память, адрес выделенного блока заносишь в указатель (а не туда, куда он указывает. Он у тебя еще не указывает никуда): GetMem(b, ser); // Без разыменованияОткуда ты взял, что надо в GetMem/FreeMem разыменовывать указатель? Эти процедуры выделяют память, а не работают с ней, поэтому имеют дело только с самим указателем. Куда он указывает - их мало интересует (если вообще интересует). У тебя F1 заело? Посмотри, что пишет контекстная помощь о GetMem/FreeMem и что - о BlockRead/BlockWrite: Цитата procedure GetMem(var P: Pointer; Size: Word); Чувствуешь разницу? Гте-то нужен указатель, а где-то - бестиповый кусок памяти. Это - как раз то, на что указатель показывает...procedure FreeMem(var P: Pointer; Size: Word); procedure BlockRead(var F: File; var Buf; Count: Word [; var Result: Word]); procedure BlockWrite(var f: File; var Buf; Count: Word [; var Result: Word]); Сообщение отредактировано: IUnknown - 26.05.2011 20:12 |
Krjuger |
![]()
Сообщение
#25
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
У меня "семерка" 64 разрядная,так что запускаю я через Dos box, навыков работы с ним у меня мало(практически нет) все что могу это запустить ту программу,что мне нужна.В общем вместо хелпа он мне выдает кучу всяких иероглифоф в которых разобратсья невозможно,понятно,что надо менять кодировку,но где и как, я не знаю.Когда я пытался запускать ЛИСП он вообще отказывался подключать хелп и говорил,что его нету.
В общем исправил,нормально отработало с файлами на 1 КБ и 84 КБ.Но что то мне кажется,что если оба файла будут больше и их кратность будет больше чем 64кб,то тут возникнут проблемы. Кстати время выполнения уже становится физически ощутимым.(возможно из-за эмулятора).
Сообщение отредактировано: Krjuger - 26.05.2011 21:04 |
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 13:46 |