![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CopyMemory - ограничена по сайзу? [D5, Win2k, WinXP]
Yaro © (2002-09-12 09:32:00)Люди, что за фигня?
У меня есть два указателя:
1. просто указатель
2. указатель на динамический массив
делаю ГетМэм для 1-го указателя,
пишу CopyMemory(_1, _2, "размер _2");
выскакивает ошибка типа Эцесс Волитейшин.
когда сайз относительно маленикий ставлю - 500 байт, например - все ок, а большие - фигня... У меня подозрение, что мой второй массив фрагментирован в памяти, такое может быть?
(обмен происходит внутри программы, не в ДЛЛ)
Набережных С. (2002-09-13 09:24:00) [1]Правильно, если убрать "- ошибка?":) и если действительно нужно Size-1, в чем я почему-то сомневаюсь.
> @t - указатель на указатель, который указывает на первый элемент массива. Аж смешно получается :)
А мне как-то нет...
Yaro (2002-09-13 07:24:00) [2]Старый Паскалист ->
другими словами, если t: array of integer, то
t - ячейка в памяти, в которой хранится указатель на первый элемент массива.
@t - указатель на указатель, который указывает на первый элемент массива. Аж смешно получается :)
Если я правильно понял, то мой код теперь должен выглядеть так:
var t: array of longint;
<...>
setlength(t, n);
lalala( {@}t, n*4);
<...>
procedure lalala(_mass: pointer; size: integer);
var bb: pointer;
<...>
if dd.lpSurface = nil then exit;
bb := dd.lpSurface;
CopyMemory(bb, _mass, Size-1); - ошибка?
правильно?
Старый Паскалист (2002-09-12 10:28:00) [3]2Yaro ©
Для обычного массива эти вещи совпадают.
Но динамический массив устроен по другому - это указатель на данные (сами данные при изменении размера массива могут быть
переразмещены в памяти)
McSimm (2002-09-12 10:25:00) [4]Где хранится размер массива не играет роли. Он в данном случае не при чем.
McSimm (2002-09-12 10:22:00) [5]@t - адрес переменной t, в которой хранится указатель на массив.
Т.е. Pointer(@t)^ - адрес массива.
@t[0] - адрес первого элемента массива.
Alx2 (2002-09-12 10:17:00) [6]>Старый Паскалист - А чего так? До этого хранится размер массива?
Ага. Динамический массив потому-что.
Yaro (2002-09-12 10:10:00) [7]Старый Паскалист - А чего так? До этого хранится размер массива?
Старый Паскалист (2002-09-12 10:02:00) [8]lalala(@t [0], n*4);
Yaro (2002-09-12 09:59:00) [9]var t: array of longint;
<...>
setlength(t, n);
lalala(@t, n*4);
<...>
procedure lalala(_mass: pointer; size: integer);
var bb: pointer;
<...>
if dd.lpSurface = nil then exit;
bb := dd.lpSurface;
CopyMemory(bb, _mass, Size-1); - ошибка!
ну что-то в этом духе, в общем...
MBo (2002-09-12 09:35:00) [10]код покажи