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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2010, 23:32   #1
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию Ошибка доступа памяти, при работе с принятой строкой.

В общем мистика какая-то, если отправляю сам себе сообщения все нормально функционирует, как пытаюсь переслать сообщение по инету кому-то, при приёме выдаёт ошибку.
Код:
var
EndTime : integer;
RcvLine: AnsiString;
***
razm := SizeOf(RecvAddr);
if RecvFrom(Sckt,RcvLine,sizeof(RcvLine),0,RecvAddr,razm) > 0 then
begin
  EndTime := pos('<',RcvLine);
Отправляю по UPD, использую WinSock. Сокет в неблокирующем режиме. $101 версия.
Zeraim вне форума Ответить с цитированием
Старый 26.01.2010, 00:37   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var
EndTime : integer;
RcvLine: AnsiString;
***
razm := SizeOf(RecvAddr);
SetLength(RecvLine,256);
if RecvFrom(Sckt,RcvLine[1],Length(RecvLine){можно 256 ставить для данного примера)},0,RecvAddr,razm) > 0 then
begin
  EndTime := pos('<',RcvLine);
на будущее изучите что такое var и что оно значит(и как его можно заменить)
а то передаете указатель на указатель(строки в Делфи(простой не лимитированный стринг)это указатель на строку)переписываете нужный указатель..
так что никакой мистики.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 26.01.2010 в 00:51.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.01.2010, 00:40   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Я бы вместо
Код:
RcvLine: AnsiString;
посоветовал все таки использовать
Код:
RcvLine:array[0..255] of char;
Код:
RecvFrom(Sckt,RcvLine,sizeof(RecvLine),0,RecvAddr,razm) > 0 then

Последний раз редактировалось profi; 26.01.2010 в 00:50.
profi вне форума Ответить с цитированием
Старый 26.01.2010, 00:52   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Length возвратит длину строки или массива.
на SizeOf я немного косо смотрю(всмысле не доверяю)
ибо если у нас указатель на строку то он может вернуть размер указателя(как в С)...поэтому я предпочитаю пользоваться более надежным.
для Юникода умножаем на 2...и только.

кстати profi, для надежности советую всетаки передавать первый элемент как параметр а не сам массив.надежнее так(в данном случае поидее без разницы)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 26.01.2010 в 00:54.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.01.2010, 00:52   #5
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Не вариант, да к тому же вместо:
1.0.0.199>42508734<Nick: message
получаются 3-4 иероглифа, если читать RcvLine[].
Zeraim вне форума Ответить с цитированием
Старый 26.01.2010, 00:55   #6
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Давай я кину пример с неблокирующими сокетами, который когда то писал. Если что - пиши ЛС.
profi вне форума Ответить с цитированием
Старый 26.01.2010, 00:56   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну вместо char поставь ANSIchar
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.01.2010, 00:57   #8
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

255 pchar не очень хочется, как-то ограничено получается.
И лично мне не понятно, разницы между отправкой самому себе и по инету кому-то сообщений, принцип вроде тот же 8) А работает почему-то по разному.
=================================== ==============
Хмм ну попробую правда что-то у меня из головы магическое число не выходит xD

Последний раз редактировалось Zeraim; 26.01.2010 в 01:01.
Zeraim вне форума Ответить с цитированием
Старый 26.01.2010, 00:59   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Zeraim Посмотреть сообщение
255 pchar не очень хочется, как-то ограничено получается.
дык, а кто мешает больше поставить?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.01.2010, 01:01   #10
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Пепел Феникса, просто я не доверяю AnsiString 255 это не предел
profi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка доступа к памяти AzoTik Общие вопросы Delphi 6 22.01.2010 10:17
Утечка памяти при работе с GDI+ Ivan_32 Общие вопросы C/C++ 2 29.11.2009 00:12
Ошибка: Нарушение доступа к памяти. VladimirAleks Общие вопросы Delphi 6 03.11.2009 14:42
Бешеное потребление виртуальной памяти при работе в Excel 2003 dikdm Microsoft Office Excel 2 28.04.2009 13:10
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10