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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
4-1200752240
RU-mata
2008-01-19 17:17
2008.11.30
Как отключить "память" мыши?


2-1224493145
Alex7
2008-10-20 12:59
2008.11.30
возврат двух значений одним вызовом одной функции


15-1222319756
Slider007
2008-09-25 09:15
2008.11.30
С днем рождения ! 25 сентября 2008 среда


15-1222677858
KygECHuK
2008-09-29 12:44
2008.11.30
Определение квалификиции специалиста по авто тестированию


2-1224738416
ganda
2008-10-23 09:06
2008.11.30
Создание sql запроса





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