Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Утечка памяти


Автор: Sergio 15.7.2008, 00:15
Здравствуйте. 
У меня течёт память каждый раз при отправке пакета(
Вот код отправки:
Код

int winSocket::Send(Data pack)
{
    int error = 0;

    error = sendto(this->sClient, (char*)&pack, sizeof(pack), 0, 
                  (struct sockaddr *)&this->servaddr, sizeof(this->servaddr));

    if (error == SOCKET_ERROR)
    {
        printf("Send failed\n");
        return -1;
    }
    else
    {
        printf("Send Ok\n");
        return 0;
    }
}

Помогите найти утечку.

Автор: ppoger 15.7.2008, 02:19
ну для начала передавай структуру data не значением, а по ссылке или передавай указатель. а больше я ничего тут не вижу, за исключением того, что надо проверять, сколько реально отправлено, и если не все, то доотправлять часть данных. но мемори лик скорее всего в другом месте. юзай _CrtSetDbgFlag

Автор: Sergio 15.7.2008, 13:28
Цитата

ну для начала передавай структуру data не значением, а по ссылке или передавай указатель.

ppoger, структура же относится к автоматическому типу памяти. Удалится при выхое из даного блока.

Автор: Mayk 15.7.2008, 13:29
Цитата(Sergio @  15.7.2008,  04:15 Найти цитируемый пост)
Помогите найти утечку. 

С чего известно что а) она существует  б)  она существует в приведенном участке кода?

Автор: Sergio 15.7.2008, 13:50
Цитата

а) она существует 

Потому что я использую Таск Менеджер. Там видно что каждый раз при отправке пакета растёт память. 
Логика програмы сделана так что каждую секунду отправляется пакет с даными.
Цитата

б)  она существует в приведенном участке кода? 

Потому что этот код отвечает за отправку пакета.Он используется в С шарпе в виде ДЛЛ.
Поскольку там присутствует сборщик мусора то вероятность утечки памяти на стороне шарпа я откинул

Автор: mes 17.7.2008, 23:54
Цитата(Sergio @  15.7.2008,  13:50 Найти цитируемый пост)
Потому что этот код отвечает за отправку пакета. 

можно коментировать часть кода и проверять повторится ли ситуация и так пока не достигнута цель..  smile 

Автор: DominiK 20.7.2008, 09:49
Когда то сам парился по этому поводу напрасно, пару дней лопатил код в котором утечкой и не пахло. Сильно не зацикливайся на Task Manager. Для реальной проверки, оставь софтину работать минут 20. + Перезапусти таск менеджер пару раз и увидишь что датчик памяти сбивается в начальное число.

Автор: Fin 20.7.2008, 15:42
Сушествует куча софтин, которые показывают реальные течи памяти, а не мнимые. Да и в самой студии встроен механизм определения течи. Нужно только подключить загаловочный файл и определить пару макросов. http://msdn.microsoft.com/en-us/library/x98tx3cf%28VS.80%29.aspx

Автор: W4FhLF 20.7.2008, 15:58
Так юзай smart pointer's. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)