Главная страница
    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.006 c
15-1239654602
Юрий
2009-04-14 00:30
2009.06.21
С днем рождения ! 14 апреля 2009 вторник


2-1241077318
@Ujin
2009-04-30 11:41
2009.06.21
Про комплексные числа...


2-1241444864
fog
2009-05-04 17:47
2009.06.21
ADO. Создание таблицы из шаблона


2-1241619626
Maksas
2009-05-06 18:20
2009.06.21
Вопрос по Мемо


15-1239797316
DynaBlaster
2009-04-15 16:08
2009.06.21
Проектирование БД, часть 2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский