Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.30;
Скачать: CL | DM;

Вниз

FreeMem   Найти похожие ветки 

 
lead-in   (2008-10-16 15:38) [0]

Здравствуйте, вот пишу следущее:

var map: array of char;
begin
 str := "test";
 GetMem(Pointer(map), 10);
 showmessage(StrPas(StrPCopy(@map, str)));
 FreeMem(Pointer(map), sizeof(map))
end

вылетает AV на FreeMem, пробовал вместо GetMem и FreeMem SetLength и map := nil, всё одно, подскажите что не так делаю, если делаю через статический массив, то всё в порядке...


 
Palladin ©   (2008-10-16 15:43) [1]

где же ты, горемычный, вычитал про подобную работу с дин.массивом то?


 
clickmaker ©   (2008-10-16 15:43) [2]

проблема в sizeof(map)
чему он равен, как думаешь?
и зачем его указывать вообще?


 
Сергей М. ©   (2008-10-16 15:44) [3]

GetMem тут ни в какую дырку не годится, равно как и FreeMem


> пробовал вместо GetMem ..SetLength


А вот это как раз верно.


> вместо FreeMem .. map := nil


А это, напротив, неверно.
Либо SetLength(map, 0) либо вообще ничего, в первую очередь если map явл-ся локальной переменной подпрограммы.


 
clickmaker ©   (2008-10-16 15:45) [4]

> array of char;

кстати, да. Тут SetLength(10) нужен
GetMem - это, если бы был map: PChar


 
Palladin ©   (2008-10-16 15:45) [5]


> map := nil

верно :)


 
workbench   (2008-10-16 15:49) [6]


> Palladin


нигде, можно сказать щас этим и занимаюсь)


> clickmaker



> Сергей М.


вот так переписал:

str := "test";
SetLength(map, 10);
showmessage(StrPas(StrPCopy(@map, str)));
SetLength(map, 0)

всё равно AV, после строки со showmsg в str почему-то заполнен всякой абракадаброй...


 
Palladin ©   (2008-10-16 15:51) [7]

showmessage(PChar(@map[0]));

и всего делов, учти, что последний элемент массива обязан быть #0
иначе увидишь такое, что и во сне не приснится...


 
workbench   (2008-10-16 15:51) [8]

пропалился, извините, стыдно просто за вопрос(((


 
Palladin ©   (2008-10-16 15:52) [9]

а, ну move(str[1],map[0],Length(str));
map[Length(str)]:=#0;


 
lead-in   (2008-10-16 15:59) [10]


> Palladin ©   (16.10.08 15:52) [9]


Так всё норм, а не объясниле ли почему эта строка:

 showmessage(StrPas(StrPCopy(@map, str)))

к такому результату приводила?


 
Palladin ©   (2008-10-16 16:02) [11]

а кто сказал что array of char это PChar? работа с PChar идет чуть ли на уровне compiler magic, и такой ерундой, как подстановка идентификатора дин.массива замест PChar, страдать не стоит


 
Сергей М. ©   (2008-10-16 16:03) [12]


> после строки со showmsg в str почему-то заполнен всякой
> абракадаброй


Ну так ты сам и завалил мусором переменную map)


> Palladin ©   (16.10.08 15:45) [5]


Угу, это я проглючил) ..компайлер умный, он поймет чего в этом случае от него хотят)


 
Palladin ©   (2008-10-16 16:04) [13]

и, кстати говоря, @map это не указатель на char, это указатель на сам идентификатор map, который в свою очередь сам указатель

Showmessage(StrPas(StrPCopy(@map[0], str)))

вот так должно отработать


 
lead-in   (2008-10-16 16:13) [14]

вот это отлично работает:
 Showmessage(StrPas(StrPCopy(@map[0], str)))

только вот чего не пойму, эта запись:
 @map
согласно одной книжке (С. Бобровский) и так указывает на первый элемент массива, то есть в данном случае как раз на 0-й байт, is not it?


 
clickmaker ©   (2008-10-16 16:31) [15]

> [14] lead-in   (16.10.08 16:13)

map - это уже указатель, но как бы для внутреннего использования. Поэтому запись @map - бессмысленна.
а вот @map[0] - это уже указатель на данные, на начало массива


 
DevilDevil ©   (2008-10-16 16:41) [16]

можно pchar(map)


 
han_malign ©   (2008-10-16 17:17) [17]


> согласно одной книжке (С. Бобровский) и так указывает на первый элемент массива

- только в случае статического массива  map: array[0..9]of char
но в этом случае прокатит и Showmessage(StrPas(StrPCopy(map, str)))


 
Palladin ©   (2008-10-16 20:20) [18]

ты такие книжки больше не читай или читай внимательней



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

Текущий архив: 2008.11.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
3-1210764969
VlGrig
2008-05-14 15:36
2008.11.30
Конфликт ADO и BDE ???


2-1224766335
Lamer6666
2008-10-23 16:52
2008.11.30
Kak obratit sa k elementu formi po ego imeni?


3-1210767541
Beer_Hunter
2008-05-14 16:19
2008.11.30
excel и dbf


2-1224486893
Lamer6666
2008-10-20 11:14
2008.11.30
TRegExpr как выбрать все символы строки слева от условия?


2-1224549620
koha!
2008-10-21 04:40
2008.11.30
неприодалимый глюк погите разобраться в VCL