Страница 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.