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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
14-73865
RV
2002-08-28 12:13
2002.09.23
Астрология. Наука или ...


1-73685
KidMan
2002-09-10 22:52
2002.09.23
Вторая загрузка одного и того же модуля


14-73811
KPY
2002-08-26 14:05
2002.09.23
Программа говорилка


6-73782
Proksima
2002-07-18 16:56
2002.09.23
Как узнать, с какой рабочей станции зашел нужный мне логин ?


1-73606
antoniz
2002-09-12 12:17
2002.09.23
Как можно внедрить на панель формы Com обьект