Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Вниз

Ошибка после обращения к Pointer как к целому   Найти похожие ветки 

 
ford ©   (2009-05-04 12:55) [0]

Здравствуйте!
вот код

Var Buf:Pointer;
   data:Array[1..10] of Integer;
begin
data[1]:=10;
GetMem(Buf,SizeOf(Integer)*10);
move(Data[1],Buf,SizeOf(Integer)*10);
Label1.Caption:=IntToStr(Integer(Buf));
end;
и получаем Access Violation
:(
на End
пробовал перед End ставить вызов FreeMem(buf);
вылетает на на FreeMem

где я ошибся
подскажите плииз


 
Palladin ©   (2009-05-04 12:56) [1]

а move разве указатель принимает?


 
Palladin ©   (2009-05-04 12:58) [2]

и вообще что за бред тут Label1.Caption:=IntToStr(Integer(Buf)); ?


 
ford ©   (2009-05-04 13:00) [3]


> Palladin ©   (04.05.09 12:56) [1]
> а move разве указатель принимает?

как виш принимает коль компилит
и даже значение 10 на лейбле показывает


> Palladin ©   (04.05.09 12:58) [2]
> и вообще что за бред тут Label1.Caption:=IntToStr(Integer(Buf));
>  ?

а что именно тебя смутило?


 
Медвежонок Пятачок ©   (2009-05-04 13:01) [4]

как виш принимает коль компилит

Тоже логика однако .....


 
Palladin ©   (2009-05-04 13:02) [5]


> ford ©   (04.05.09 13:00) [3]

ну ты фрукт :) он принимает переменную по адресу которой он будет записывать, а теперь угадай, куда будет мувится твой массив


> а что именно тебя смутило?

а зачем тебе в каптионе адрес?


 
Медвежонок Пятачок ©   (2009-05-04 13:02) [6]

procedure Move( const Source; var Dest; count : Integer );

Где здесь хоть один пойнтер?


 
ford ©   (2009-05-04 13:03) [7]

точно !!
слона то я и не заметил

о как надо
move(Data[1],Buf^,SizeOf(Integer)*10);
Label1.Caption:=IntToStr(Integer(Buf^));


 
Palladin ©   (2009-05-04 13:03) [8]


> Медвежонок Пятачок ©   (04.05.09 13:02) [6]

а пофих, компилится - значит все правильно :))


 
ford ©   (2009-05-04 13:04) [9]


> Медвежонок Пятачок ©   (04.05.09 13:02) [6]
> procedure Move( const Source; var Dest; count : Integer
> );
>
> Где здесь хоть один пойнтер?

void __fastcall Move(const void *Source, void *Dest, int Count);


 
Медвежонок Пятачок ©   (2009-05-04 13:06) [10]

void __fastcall Move(const void *Source, void *Dest, int Count);

Имело бы еще это хоть какое-то отношение к вопросу


 
ford ©   (2009-05-04 13:11) [11]


> Имело бы еще это хоть какое-то отношение к вопросу

сам спросил и где там поинтер
я тебе скопировал строчку из тогоже хелпа что и ты мне :)
тут как виш всетаки указатели
и массив в дельфи тоже указатель
вроде как :)

ну ето лана
разобрался вроде
тока вот вопрос
а как тогда можно сделать следующий финт ушами
move(Data[1],Buf[4]^,SizeOf(Integer)*5);
т.е. скопировать данные из Data в P но не в начало а например в середину выделенного фрагмента памяти

грит на то безобразие что Array type хочет


 
Palladin ©   (2009-05-04 13:13) [12]

Buf:PInteger;
BufOffset4:PInteger;

BufOffset4:=Buf;
Inc(BuffOffset4,4);


 
Palladin ©   (2009-05-04 13:14) [13]

или без финтов с указателями

Move(...,Pointer(Integer(Buf)+SizeOf(Integer)*4)^


 
Palladin ©   (2009-05-04 13:15) [14]

А вообще не пойму, зачем эти финты с нетипизированными указателями нужны?


 
Palladin ©   (2009-05-04 13:17) [15]


> и массив в дельфи тоже указатель

Твой массив - не указатель, а на самом деле массив. Идентификаторы динамического массива - указатели. Статического - сами массивы. Ты с таким же успехом мог бы мувить и не Data[1], а просто Data.


 
Anatoly Podgoretsky ©   (2009-05-04 13:24) [16]

> ford  (04.05.2009 13:11:11)  [11]

Это не так, кроме динамических массивов. Это в СИ


 
ford ©   (2009-05-04 13:24) [17]


>  вообще не пойму, зачем эти финты с нетипизированными указателями
> нужны?


есть процедура которая читает файл в массив byte,
другая спользует его как массив Integer но массив переменной длины, но со строго оговоренными изменениями длины (например по 10 элементов)

т.е. на определнном этапе работы программы надо перечитать файл и если появились новые данные то дописать в уже существующий буффер в памяти
с которым описанные выше процедура работает как с массивом целых чисел
.....
ну примерно вот так :)
закат солнца в ручную


 
ford ©   (2009-05-04 13:25) [18]


> Anatoly Podgoretsky ©   (04.05.09 13:24) [16]
> > ford  (04.05.2009 13:11:11)  [11]
>
> Это не так, кроме динамических массивов. Это в СИ


да от жеш
каша от Си + Дельфи в голове :))


 
Медвежонок Пятачок ©   (2009-05-04 14:37) [19]

сам спросил и где там поинтер
я тебе скопировал строчку из тогоже хелпа что и ты мне :)


Линкуется-то не хелп, а system.pas
в котором адреса, а не указатели



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
2-1241002158
worldmen
2009-04-29 14:49
2009.06.21
Настройка TDBLookupComboBox.


15-1239864485
Дмитрий С
2009-04-16 10:48
2009.06.21
Куда сохраняется содержимое видеопамяти во время спящего режима?


11-1201874936
Татьяна
2008-02-01 17:08
2009.06.21
программирование для КПК со сканером


2-1241196392
Александр7
2009-05-01 20:46
2009.06.21
Как присвоить адрес файла переменной


2-1241463269
Ars
2009-05-04 22:54
2009.06.21
Тип поля TClientDataSet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский