Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2013, 14:32   #1
Ioanwar
Новичок
Джуниор
 
Регистрация: 06.06.2013
Сообщений: 2
По умолчанию Проблема с передачей динамического массива

В общем такая проблема...
Есть Сервер и Клиент, которые перебрасываются между собой динамическими массивами. Отправка и принятие у сервера работает отлично, но вот клиент не может нормально принять массив...
Точнее он его принимает, но либо программа сама закрывается, либо при закрытии Клиента выдает ошибку "invalid pointer operation".
Для начала я проверил, что может быть я не правильно работаю с массивом, но нет, обращение к данным в этом массиве происходит без ошибок...
Ниже привожу код программы:

Код клиента при принятии:
Цитата:
procedure TForm1.CSRead(Sender: TObject; Socket: TCustomWinSocket);
begin
try
ct:=0;
ct:=(CS.Socket.ReceiveLength div 4)div 255;
SetLength(Adm,ct);
CS.Socket.ReceiveBuf(Adm[0],CS.Socket.ReceiveLength);
List.Clear;
for i:=0 to High(Adm) do
List.Items.Add(Adm[i].Name+' '+'('+Adm[i].ip+')'+Adm[i].roll);
finally
SetLength(Adm,0);
end;
end;
Код сервера при отправке:

Цитата:
SetLength(Mass,j);
for f:=0 to High(Mass) do
Begin
Mass[f].Name:=NameHost[f];
Mass[f].ip:=IP[f];
Mass[f].roll:=Roll[f];
end;
SS.Socket.Connections[i].SendBuf(Mass[0],SizeOf(Mass)*Length(Mass)*255); // i-задается в другом месте
SetLength(Mass,0);
Помогите добрые люди, устал уже очень ...

Последний раз редактировалось Ioanwar; 07.06.2013 в 06:58.
Ioanwar вне форума Ответить с цитированием
Старый 06.06.2013, 15:09   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Для строк нужно ещё *SizeOf(Char)
Человек_Борща вне форума Ответить с цитированием
Старый 07.06.2013, 06:53   #3
Ioanwar
Новичок
Джуниор
 
Регистрация: 06.06.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Для строк нужно ещё *SizeOf(Char)
Да согласен с вами, так будет правильней...
Но клиент так и выдаёт ошибку "invalid pointer operation".
Не могу понять из за чего, массив передается отлично, данные не потеряны, при обращении к массиву за пределы не ухожу в цикле.
Мистика

в общем когда приходит массив размерностью 1, то выдает "invalid pointer operation" послы выхода из программы.
а когда приходит массив более 1 строк, то программа вылетает с ошибкой "access violation ...".

Последний раз редактировалось Ioanwar; 07.06.2013 в 07:27.
Ioanwar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C/C++ проблема с передачей ДМУ Akkoks Общие вопросы C/C++ 3 12.06.2011 13:43
Проблема с передачей( фтпуд17 Свободное общение 5 27.01.2011 11:23
Проблема с передачей данных tools Общие вопросы C/C++ 5 25.12.2010 14:49
проблема с передачей параметров Mira-girl Общие вопросы по Java, Java SE, Kotlin 2 22.11.2010 23:59
Проблема с передачей куки arwm Работа с сетью в Delphi 7 28.12.2007 23:44