|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.01.2017, 15:10 | #1 |
Новичок
Джуниор
Регистрация: 09.06.2016
Сообщений: 1
|
Ошибка при удалении объекта Клиента
Доброго времени суток, уважаемые программисты!
Бьюсь с проблемой уже продолжительное время - ничего в голову не приходит.. Помогите, пожалуйста. Разрабатываю приложение сервер-клиент на Delphi с использованием портов завершения. Есть объект, отвечающий за хранение данных по клиенту - создается при присоединении клиента к серверу: Код HTML:
constructor cbMIServerClient.Create(DataRecvBufferID: Cardinal; IsCompletionPortWeight: Boolean; SizeBufferRecv: Cardinal);
var Addr: sockaddr_in;
Size: integer;
begin
inherited Create();
fCS := TCriticalSection.Create;
fClientStatus := csConnecting;
fIsCompletionPortWeight := IsCompletionPortWeight;
fDataRecvMessages := TQueue<String>.Create;
fDataRecvBuffer := '';
fAcceptTime := GetTickCount;
fIsAuthorized := false;
fBytesSend := 0;
fBytesRecv := 0;
//инициация структуры для приема трафика
New(fDataRecv);
with fDataRecv^
do begin
New(Buffer);
GetMem(Buffer^.Buffer, SizeBufferRecv);
Buffer^.BufferID := DataRecvBufferID;
Buffer^.BufferLength := SizeBufferRecv;
Buffer^.CountUsed := 0;
DataBuf.buf := Buffer^.Buffer;
DataBuf.len := SizeBufferRecv;
dwFlags := 0;
BufferTransfered := 0;
iType := CMD_WSARECV;
end;
end;
Код HTML:
Dispose(ClientData); Client.Destroy(); Код HTML:
destructor cbMIServerClient.Destroy; begin fDataRecvMessages.Destroy(); fDataRecvBuffer := ''; fCS.Destroy(); ZeroMemory(@fDataRecv^.Overlapped, sizeof(OVERLAPPED)); FreeMem(fDataRecv^.Buffer^.Buffer, fDataRecv^.Buffer^.BufferLength); fDataRecv^.Buffer^.Buffer := NIL; Dispose(fDataRecv^.Buffer); fDataRecv^.Buffer := NIL; Dispose(fDataRecv);} inherited Destroy(); end; Скажите, пожалуйста, в чем моя ошибка? Заранее спасибо за Ваши ответы! |
24.01.2017, 21:58 | #2 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
У Вас работа клиента идет в потоке? Если да то в Create объекта пропишите FreeOnTerminate := True; тогда это Client.Destroy(); ненужно он сам уничтожиться по завершению и выполнит все то что прописано в Destroy.
Еще попробуйте FreeMem(fDataRecv^.Buffer^.Buffer, fDataRecv^.Buffer^.BufferLength); сделать так FreeMem(fDataRecv.Buffer.Buffer); без BufferLength в Destroy Последний раз редактировалось Aliens_wolfs; 24.01.2017 в 22:57. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при удалении файла | Replicant | Общие вопросы Delphi | 13 | 29.08.2016 06:34 |
Ошибка при удалении компонента | Putin-mode | Общие вопросы Delphi | 18 | 24.01.2012 23:28 |
ошибка 1004 при удалении объекта типа Range | Red_Garry | Microsoft Office Excel | 2 | 26.02.2011 15:12 |
Ошибка при удалении из БД!!! Delphi 7. | NuR1k | БД в Delphi | 2 | 21.08.2010 19:19 |
Ошибка при удалении... | JRcoker | Общие вопросы Delphi | 8 | 29.07.2008 22:53 |