Страница 1 из 1
		
			
				Динаический буффер. Доступ.
				
Добавлено: 
27.03.2009 19:11:57 
				 Tronix
				Всем привет.
Подскажите плиз, как из этого буффера вывести первый элемент на экран? Последний/Любой? Забыл совсем.
- Код: Выделить всё
 Var
             Buf : ^Char
Begin
             GetMem(Buf, 512);
             WriteLn( Buf^[1], Buf(1)^ );    <---- HELP!
End.
И да, помню что можно через Type сделать тип массива от 1 до 512, но мне нужно любого размера....
 
			 
			
		
			
				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.
 
			 
			
		
			
				Re: Динаический буффер. Доступ.
				
Добавлено: 
27.03.2009 19:43:25 
				 Tronix
				По приведенному Вами выше примеру ругается, что Error 121: Invalid Qualifier. Если бы все так было бы просто, я бы не спросил... Компилятор - FPC v2.1. Может ключи какие?
			 
			
		
			
				Re: Динаический буффер. Доступ.
				
Добавлено: 
27.03.2009 21:06:00 
				 Михаил Крамер
				У меня FPC 2.2.0 и в нём не ругается, даже если указываю режим совместимости с TP7... Может указанные операторы начали поддерживаться только в версии 2.2.0 (я в FPC недавно работаю).
Можете конечно попробовать чтой-то типа (buf + 511)^, но если не поддерживаются индексы, боюсь, что не работает. Поиграйтесь ключом -M, или (если есть возможность) скачайте новый компилятор.
Кстати, попробуйте ^Char заменить на стандартный PChar. По моему с ним должно сработать даже в стареньком TP 7.
Добавлено спустя 55 секунд:
Кстати, а какая ОС?
			 
			
		
			
				Re: Динаический буффер. Доступ.
				
Добавлено: 
27.03.2009 21:15:58 
				 Tronix
				Спасибо огромное. С PChar заработало все как buf[blabla] := blabla;
ОС WinXP. При возможности скачаю новую версию FP.
Еще раз огромное спасибо.
Поторопился. Компилится, но трапается с эксепшн виолейшн при попытке buf[1] := A; Будем качаать новую версию.
			 
			
		
			
				Re: Динаический буффер. Доступ.
				
Добавлено: 
27.03.2009 21:30:40 
				 Михаил Крамер
				Не должно с PChar падать по идее...
Добавлено спустя 1 минуту 23 секунды:
Память то выделять не забываете?
			 
			
		
			
				Re: Динаический буффер. Доступ.
				
Добавлено: 
27.03.2009 21:40:10 
				 Tronix
				Действительно, забыл -) Было GetMem(buf, BufSize) и кусок закоменченного кода до этого, поэтому в BufSize было хз что ))
Спасибо огромное Вам за помощь. В итоге так все работает:
- Код: Выделить всё
 var buf : PChar;
begin
GetMem(buf, 512);
buf[1] := 'A';
writeln(Buf[1]);
end.
 
			 
			
		
			
				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.