Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
ВнизCopyMemory - ограничена по сайзу? Найти похожие ветки
← →
Yaro (2002-09-12 09:32) [0]Люди, что за фигня?
У меня есть два указателя:
1. просто указатель
2. указатель на динамический массив
делаю ГетМэм для 1-го указателя,
пишу CopyMemory(_1, _2, "размер _2");
выскакивает ошибка типа Эцесс Волитейшин.
когда сайз относительно маленикий ставлю - 500 байт, например - все ок, а большие - фигня... У меня подозрение, что мой второй массив фрагментирован в памяти, такое может быть?
(обмен происходит внутри программы, не в ДЛЛ)
← →
MBo (2002-09-12 09:35) [1]код покажи
← →
Yaro (2002-09-12 09:59) [2]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:02) [3]lalala(@t [0], n*4);
← →
Yaro (2002-09-12 10:10) [4]Старый Паскалист - А чего так? До этого хранится размер массива?
← →
Alx2 (2002-09-12 10:17) [5]>Старый Паскалист - А чего так? До этого хранится размер массива?
Ага. Динамический массив потому-что.
← →
McSimm (2002-09-12 10:22) [6]@t - адрес переменной t, в которой хранится указатель на массив.
Т.е. Pointer(@t)^ - адрес массива.
@t[0] - адрес первого элемента массива.
← →
McSimm (2002-09-12 10:25) [7]Где хранится размер массива не играет роли. Он в данном случае не при чем.
← →
Старый Паскалист (2002-09-12 10:28) [8]2Yaro ©
Для обычного массива эти вещи совпадают.
Но динамический массив устроен по другому - это указатель на данные (сами данные при изменении размера массива могут быть
переразмещены в памяти)
← →
Yaro (2002-09-13 07:24) [9]Старый Паскалист ->
другими словами, если 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-13 09:24) [10]Правильно, если убрать "- ошибка?":) и если действительно нужно Size-1, в чем я почему-то сомневаюсь.
> @t - указатель на указатель, который указывает на первый элемент массива. Аж смешно получается :)
А мне как-то нет...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c