Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2012, 22:30   #1
sysop999
 
Регистрация: 15.04.2012
Сообщений: 3
По умолчанию Алгоритм записи чтения нетипизированого файла

Добрый вечер =), очень прошу, посмотрите, что не правильно
суть в чем, создаю масивы указателей, выделяю 40кб, нужно записать в нетипизированый файл, и считать с нетипизированого файла, компилятор материться

Код:
program reader;
var
   a:array [1..2] of pointer;
   f:file;
   pr:^byte;
begin
getmem(a[1],40000);
getmem(a[1],40000);
pr:=ptr(seg(a[1]^),ofs(a[1]^));
pr^:=100;
pr:=ptr(seg(a[2]^),ofs(a[2]^));
pr^:=200;
 
assign (f,'1.dat');
rewrite (f,1);
blockwrite (f,a[1],40000);
blockwrite (f,a[2],40000);
close(f);
reset (f,1);
blockread (f,a[1],40000);{---------------как здесь делать?-------}
blockread (f,a[2],40000);
close(f);
pr:=ptr(seg(a[1]^),ofs(a[1]^));
writeln(pr^);
pr:=ptr(seg(a[2]^),ofs(a[2]^));
writeln(pr^);
readln;
end.

Последний раз редактировалось Stilet; 15.04.2012 в 22:45.
sysop999 вне форума Ответить с цитированием
Старый 15.04.2012, 22:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как здесь делать?
По-моему тут разименовывать нужно: blockread (f,a[1]^,40000);
Цитата:
getmem(a[1],40000);
getmem(a[1],40000);
Шутка? Если нет то учти - ты захламляешь память, и не выделяешь ничего для a[2]
Цитата:
pr:=ptr(seg(a[1]^),ofs(a[1]^));
pr^:=100;
pr:=ptr(seg(a[2]^),ofs(a[2]^));
pr^:=200;
Разве нельзя проще?:
Код:
a[1]^:=100;
a[2]^:=200;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.04.2012, 23:04   #3
sysop999
 
Регистрация: 15.04.2012
Сообщений: 3
По умолчанию

Сейчас объясню, да правильно невнимательно набрал
getmem(a[2],40000);
Я не засоряю память, я делаю прогу сортировки масивов, больше чем 64 кб, для этого мне нужно использовать динамическую память, я создаю массиву указателей и со смещением присваиваю в ячейку памяти число
например
pr:=ptr(seg(a[1]^),ofs(a[1]^));
pr^:=100;
и так дальше
pr:=ptr(seg(a[1]^),ofs(a[1]^)+1);
pr^:=100;

Я делаю сортировку матрицы типа 2х2х40000, и хочу перед сортировкой одним методом сделать бекап, а потом перед сортировкой другим методом востановить изначальный массив, который записам через указатели с гетмемом и значениями со смещение.

[QUOTE=Stilet;1022206]По-моему тут разименовывать нужно: blockread (f,a[1]^,40000);
Аааа не хочет, мне надо считать именно указатель с данными

Последний раз редактировалось Stilet; 15.04.2012 в 23:46.
sysop999 вне форума Ответить с цитированием
Старый 16.04.2012, 19:59   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Указатель записывать в файл и считывать из файла абсолютно бесмысленно, т.к. он имеет смысл только в период работы программы. Даже при следующем запуске указатели могут указывать на другие адреса памяти.
Поэтому советую прислушаться к словам Stilet.

Кстати, длина указателя всего 4 байта. Считывать или записывать что-то за его пределами (остальные 39996 байт) бесмысленно, т.к. там содержится мусор (при записи). А при чтении есть вероятность попрортить что-то в оперативной памяти.

Последний раз редактировалось s-andriano; 16.04.2012 в 20:17.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Попытка чтения или записи в защищенную память. zzz6 Общие вопросы C/C++ 2 23.03.2012 20:26
Алгоритм программного чтения кода(наподобие чтения тегов в браузерах) psih_stalker Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 10.01.2012 21:32
Вопрос по отключению устройств чтения/ записи xaero93 Помощь студентам 1 27.07.2010 21:03
С++. Кеширование чтения\записи файла Vinny Помощь студентам 1 03.06.2009 00:43