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

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

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

Ответить
Tronix
новенький
Сообщения: 12
Зарегистрирован: 27.03.2009 18:04:33

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

Сообщение Tronix »

Всем привет.

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

Код: Выделить всё

Var
             Buf : ^Char
Begin
             GetMem(Buf, 512);
             WriteLn( Buf^[1], Buf(1)^ );    <---- HELP!
End.


И да, помню что можно через Type сделать тип массива от 1 до 512, но мне нужно любого размера....
Михаил Крамер
новенький
Сообщения: 73
Зарегистрирован: 08.02.2008 13:26:40

Сообщение Михаил Крамер »

Код: Выделить всё

var buf: ^Char;
begin
        GetMem(buf, 512);
        Buf[0]:= 'A';
        Buf[511]:= 'B';
        Write(Buf[0], Buf[511]);
end.
Tronix
новенький
Сообщения: 12
Зарегистрирован: 27.03.2009 18:04:33

Сообщение Tronix »

По приведенному Вами выше примеру ругается, что Error 121: Invalid Qualifier. Если бы все так было бы просто, я бы не спросил... Компилятор - FPC v2.1. Может ключи какие?
Михаил Крамер
новенький
Сообщения: 73
Зарегистрирован: 08.02.2008 13:26:40

Сообщение Михаил Крамер »

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

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

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

Добавлено спустя 55 секунд:
Кстати, а какая ОС?
Tronix
новенький
Сообщения: 12
Зарегистрирован: 27.03.2009 18:04:33

Сообщение Tronix »

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

Поторопился. Компилится, но трапается с эксепшн виолейшн при попытке buf[1] := A; Будем качаать новую версию.
Михаил Крамер
новенький
Сообщения: 73
Зарегистрирован: 08.02.2008 13:26:40

Сообщение Михаил Крамер »

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

Добавлено спустя 1 минуту 23 секунды:
Память то выделять не забываете?
Tronix
новенький
Сообщения: 12
Зарегистрирован: 27.03.2009 18:04:33

Сообщение Tronix »

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

Код: Выделить всё

var buf : PChar;
begin
GetMem(buf, 512);
buf[1] := 'A';
writeln(Buf[1]);
end.
Михаил Крамер
новенький
Сообщения: 73
Зарегистрирован: 08.02.2008 13:26:40

Сообщение Михаил Крамер »

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

Код: Выделить всё

type rec = record a, b: Integer; end;

var r: ^rec;

begin
GetMem(r, Sizeof(rec)* 512);
r[511].a:= 512;
end.
Ответить