Динаический буффер. Доступ.

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Динаический буффер. Доступ.

Сообщение Tronix » 27.03.2009 19:11:57

Всем привет.

Подскажите плиз, как из этого буффера вывести первый элемент на экран? Последний/Любой? Забыл совсем.

Код: Выделить всё
Var
             Buf : ^Char
Begin
             GetMem(Buf, 512);
             WriteLn( Buf^[1], Buf(1)^ );    <---- HELP!
End.


И да, помню что можно через Type сделать тип массива от 1 до 512, но мне нужно любого размера....
Tronix
новенький
 
Сообщения: 12
Зарегистрирован: 27.03.2009 19:04:33

Re: Динаический буффер. Доступ.

Сообщение Михаил Крамер » 27.03.2009 19:38:21

Код: Выделить всё
var buf: ^Char;
begin
        GetMem(buf, 512);
        Buf[0]:= 'A';
        Buf[511]:= 'B';
        Write(Buf[0], Buf[511]);
end.
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40

Re: Динаический буффер. Доступ.

Сообщение Tronix » 27.03.2009 19:43:25

По приведенному Вами выше примеру ругается, что Error 121: Invalid Qualifier. Если бы все так было бы просто, я бы не спросил... Компилятор - FPC v2.1. Может ключи какие?
Tronix
новенький
 
Сообщения: 12
Зарегистрирован: 27.03.2009 19:04:33

Re: Динаический буффер. Доступ.

Сообщение Михаил Крамер » 27.03.2009 21:06:00

У меня FPC 2.2.0 и в нём не ругается, даже если указываю режим совместимости с TP7... Может указанные операторы начали поддерживаться только в версии 2.2.0 (я в FPC недавно работаю).

Можете конечно попробовать чтой-то типа (buf + 511)^, но если не поддерживаются индексы, боюсь, что не работает. Поиграйтесь ключом -M, или (если есть возможность) скачайте новый компилятор.

Кстати, попробуйте ^Char заменить на стандартный PChar. По моему с ним должно сработать даже в стареньком TP 7.

Добавлено спустя 55 секунд:
Кстати, а какая ОС?
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40

Re: Динаический буффер. Доступ.

Сообщение Tronix » 27.03.2009 21:15:58

Спасибо огромное. С PChar заработало все как buf[blabla] := blabla;
ОС WinXP. При возможности скачаю новую версию FP.
Еще раз огромное спасибо.

Поторопился. Компилится, но трапается с эксепшн виолейшн при попытке buf[1] := A; Будем качаать новую версию.
Tronix
новенький
 
Сообщения: 12
Зарегистрирован: 27.03.2009 19:04:33

Re: Динаический буффер. Доступ.

Сообщение Михаил Крамер » 27.03.2009 21:30:40

Не должно с PChar падать по идее...

Добавлено спустя 1 минуту 23 секунды:
Память то выделять не забываете?
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40

Re: Динаический буффер. Доступ.

Сообщение Tronix » 27.03.2009 21:40:10

Действительно, забыл -) Было GetMem(buf, BufSize) и кусок закоменченного кода до этого, поэтому в BufSize было хз что ))
Спасибо огромное Вам за помощь. В итоге так все работает:

Код: Выделить всё
var buf : PChar;
begin
GetMem(buf, 512);
buf[1] := 'A';
writeln(Buf[1]);
end.
Tronix
новенький
 
Сообщения: 12
Зарегистрирован: 27.03.2009 19:04:33

Re: Динаический буффер. Доступ.

Сообщение Михаил Крамер » 27.03.2009 21:51:58

Но новую версию всё же скачайте, поскольку в ней будет работать даже такой код:

Код: Выделить всё
type rec = record a, b: Integer; end;

var r: ^rec;

begin
GetMem(r, Sizeof(rec)* 512);
r[511].a:= 512;
end.
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

Рейтинг@Mail.ru