![]() |
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Сеть IP Узнайте, TCP / IP, Интернет-протокол, маршрутизации, маршрутизаторов, сетевых протоколов в UNIX и Linux форум. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| Проблема утечки памяти | kshk123 | HP-UX | 2 | 05-25-2009 08:01 AM |
| Проблема утечки памяти | sonali | Программирования высокого уровня | 5 | 05-25-2009 07:55 AM |
| Утечка памяти в pthread | mindTeaser | UNIX перспективных И опытных пользователей | 4 | 05-18-2009 02:30 AM |
| Память утечка вилка () | whererush | Программирования высокого уровня | 7 | 05-11-2006 12:51 PM |
| о виртуальной памяти и утечка памяти | shriashishpatil | Программирования высокого уровня | 4 | 02-20-2006 11:31 AM |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
||||
|
Утечка памяти?
Привет Все, мой клиент-сервер приложений может работать в двух режимах: 1) в одном направлении - только клиент отправляет сообщения на сервере 2) двух направлениях - сервер дает ответы "для клиента. при запуске программы в первом режиме он выглядит хорошо, но когда сервер отвечает клиенту, чем клиента заявку выхода его эксплуатации по истечении короткого времени. Я пытаюсь найти проблему, но некоторые taugh времени. это функция, которая считывает данные на стороне клиента (в котором я есть проблемы): Код:
int TCPClient::readSocketData(int s,
char *decodeUnifiedMsgForServer,
int n,
bool& isMsg
)
{
int bcount; int br;
bcount = 0;
br = 0;
while (bcount < n)
{
if ((br = recv(s,decodeUnifiedMsgForServer,n-bcount,0)) > 0)
{
isMsg = true;
bcount += br; decodeUnifiedMsgForServer+= br;
}
else if (br < 0) /* signal an error to the caller */
{
return(-1);
}
else {
return bcount;
}
//Y 17_04_05 -
Sleep(0);
//Y.
}
return(bcount);
}
После буфером (decodeUnifiedMsgForServer) заполняется функцией выше я декодировать данные в соответствующие данным классам следующим образом: Код:
void BrainControlComData::decodeMsg(char* decodeUnifiedMsgForServer)
{
if(strlen(decodeUnifiedMsgForServer) == 0)
{
char* error = "probably an error (see Q1 below)";
}
char* msg = decodeUnifiedMsgForServer;
int size = 4;
int lenCursorData;
int lenManipData;
int lenVzData;
//places 1 - 12 in msg are reserved for total size/ isEventMsg/ MsgID
int Web_lenOfClass;
// decode len of msg
memcpy(&Web_lenOfClass, msg, size);
int lenOfClass = ntohl(Web_lenOfClass);
int Web_MsgID;
// decode msg ID
memcpy(&Web_MsgID, msg + MSG_ID_LOCATION, size);
int msgID = ntohl(Web_MsgID);
//Y 6_07_05 -
int counter = 12;
int len = 0;
len = comData[CURSOR_DATA]->decodeMsg(msg + counter);
counter += len;
len = comData[STATE_DATA]->decodeMsg(msg);
}
первые 3 байта в буфер чисел (общие данные, например, - всего Лен, msgID т.д.) и декодировать их в 2 функции. после этого я послал в буфер данных классов, декодировать данные, соответствующие их потребностям, используя fuction decodeMsg. мои вопросы заключаются в следующем: 1) Почему длина буфера (decodeUnifiedMsgForServer) всегда 0 и не равен по длине с MSG, полученные от сервера? Я знаю, что данные, полученные от сервера, поскольку оно регистрируется правильно, но когда я проверить длина сбщ он equas 0 (первое "если" в Вторая функция) - любые идеи? 2) когда я заметил, что на линии вызовов с decodeMsg применение 'себя' OK, и клиент не выход ее работы. Я думаю, что такая ошибка есть что делать с памятью утечки. может быть, если я понял, первый вопрос, я могу понять, как это хорошо. Большое вам спасибо за вашу помощь, Lenna |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|