Форум программистов, компьютерный форум CyberForum.ru

"Утечка " памяти. Да или нет? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В VC++7 ATL, defaultvalue не работает при late-binding http://www.cyberforum.ru/cpp-beginners/thread488710.html
Добрый день, Столкнулся с проблемой - методы ATL COM объекта, откомпилированного под VC++7, не могут вызываться при late-binding без дефолтных параметров. Причем при компиляции под VC++6 это работает прекрасно! Т.е. метод ниже: HRESULT AA( LONG abc); можно вызвать только как:
C++ Печать из формы Помогите, пожалуйста, новичку в программировании! Ситуация такая: У меня есть диалоговое окно, в диалоговом окне есть 2 EditControl'а, куда заносится информация, и кнопка Print. Необходимо, чтобы при нажатии на кнопку Print, информация из EditControl'ов расположилась на листе в две строчки, и все это дело вывелось на принтер. Подкиньте, плииз, какие-нибудь идеи, как это можно воплотить в... http://www.cyberforum.ru/cpp-beginners/thread488709.html
C++ Как менять положение кнопки по ресайзу диалога?
Есть диалог, в нижнем правом углу кнопочка. Как сделать, чтобы при OnSize диалога кнопка оставалась снизу-справа?
Как в MSComm32.ocx посылать/получать данные в MS VC++ 6.0? C++
Как в MSComm32.ocx посылать/получать данные в MS VC++ 6.0???
C++ DOS Создание приложений с несколькими нитями http://www.cyberforum.ru/cpp-beginners/thread488656.html
Помогите плиз! Как создаются приложения с несколькими нитями? Как они организуются и т.д. Заранее спасибо!!!
C++ Не вызывается диалог класса CFileDialog под Win98 Проблема в следующем: в своем приложении собранном под VC++.NET на Windows XP я вызываю диалог класса CFileDialog для экспорта даннных в файл. Так вот, в этом приложении, но запущенном под Windows 98 этот диалог не открывается. Выполняю команду и совершенно ничего не происходит. Под Debug не могу пройти и посмотреть в чем дело - т.к. среда VC установлена под Win XP. Правда, если в stdafx.h... подробнее

Показать сообщение отдельно
Sasha K
2 / 2 / 0
Регистрация: 17.11.2009
Сообщений: 210
29.09.2010, 13:11     "Утечка " памяти. Да или нет?
Есть фоксовское приложение.
Оно в отдельном потоке запускает комсервер, написанный тоже на фоксе, который запускает одну из двух функций из Dll. Раз, может чаще или реже приложение закрывалось. Подключил обработчики и оюнаружил такое сообщение:
Исключение OLE IDispatch, код 0 из Vfpmtapp.Worker.1: Error 8007000E (Недостаточно памяти для завершения операции.) while launching method Pingserver.Pingserver::Snmp..
Приложение крутится круглосуточно и раз в 6 минут запускает этои два метода
Поскольку я в си не очень, то возможно, что допустил где-то бяку и возможно в нижеприведенном методе.
Гляньте код, может навскидку есть где-то бяка. Понимаю, что ошибка не грубая. Иначе-бы не работало вообще.
Функция делает вот, что.
Получает IP адрес, OID, и либо номер интерфейса, либо название интерфейса.
Если название, то определяю по названию номер. А потом считываю значение параметра по OID.

#pragma pack(4)
#pragma comment(lib, 'mgmtapi.lib')
#pragma comment(lib, 'snmpapi.lib')

#define WIN32_LEAN_AND_MEAN

#include <pro_ext.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <snmp.h>
#include <mgmtapi.h>

#define GET 1
#define GETNEXT 2
#define WALK 3
#define TRAP 4
#define TIMEOUT 1000 /* milliseconds */
#define RETRIES 3

void NullTerminate(Value FAR *cVal)
{
_HUnLock(cVal->ev_handle);
if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))
{
_Error(182); // Not enough memory
}
((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = ''
}

FAR GetSNMPInfo(ParamBlk FAR *parm)
{
RFC1157VarBindList variableBindings;
LPSNMP_MGR_SESSION session;
INT timeout = TIMEOUT;
INT retries = RETRIES;

BYTE requestType;
AsnInteger errorStatus;
AsnInteger errorIndex;
AsnObjectIdentifier reqObject;
AsnObjectIdentifier root;
AsnObjectIdentifier tempOid;
char *chkPtr = NULL;
char *string = NULL;
char agent[128];
char community[64];
char oid[255];
char RetWhot[128];
int oper;
int operation;
int RetType;
char rezstr[255];
int rezult = 0;
int len = 0;
int j = 0;
int i = 0;
int y = 0;
int z = 0;
int len1 = 0;
int rnum = 0;
char abc[1];
// 1 параметр agent
_HLock ( parm->p[0].val.ev_handle);
NullTerminate(&parm->p[0].val);
_StrCpy( (char FAR *) agent, _HandToPtr(parm->p[0].val.ev_handle) );
_HUnLock ( parm->p[0].val.ev_handle );
// 2 параметр community
_HLock ( parm->p[1].val.ev_handle);
NullTerminate(&parm->p[1].val);
_StrCpy( (char FAR *) community, _HandToPtr(parm->p[1].val.ev_handle) );
_HUnLock ( parm->p[1].val.ev_handle );
// 5 параметр timeout
timeout = (int) parm->p[4].val.ev_long;
// 6 параметр Что получаем
_HLock ( parm->p[5].val.ev_handle );
NullTerminate(&parm->p[5].val);
_StrCpy( (char FAR *) RetWhot, _HandToPtr(parm->p[5].val.ev_handle) );
_HUnLock ( parm->p[5].val.ev_handle );

variableBindings.list = NULL;
variableBindings.len = 0;

len1 = strlen(RetWhot);
if (len1 > 1)
{
if ((session = SnmpMgrOpen(agent, community, timeout, retries)) == NULL)
{
if (RetWhot) free(RetWhot);
_RetInt(-3,10);
return 0;
}
// if (errorStatus > 0)
// {
// if (RetWhot) free(RetWhot);
// _RetInt(-3,10);
// return 0;
// }
if (!SnmpMgrStrToOid('.1.3.6.1.2.1.2.2.1.2' {
variableBindings.len = 1;
if ((variableBindings.list = (RFC1157VarBind *)SNMP_realloc(
variableBindings.list, sizeof(RFC1157VarBind) *
variableBindings.len)) == NULL)
{
if (oid) free(oid);
SnmpMgrClose(session);
_RetInt(-2,10);
return 0;
} // end if
variableBindings.list[0].name = reqObject;
variableBindings.list[0].value.asnType = ASN_NULL;
} // end else

// 4 параметр operation
oper = (int) parm->p[3].val.ev_long;
if (oper == GET)
operation = GET;
else if (oper == GETNEXT)
operation = GETNEXT;
// else if (oper == WALK)
// operation = WALK;
// else if (oper == TRAP)
// operation = TRAP;
else
{
operation = GETNEXT;
}
if (operation == GET || operation == GETNEXT || operation == WALK)
{
if (operation == GET)
requestType = ASN_RFC1157_GETREQUEST;
else
requestType = ASN_RFC1157_GETNEXTREQUEST;
}
if (!SnmpMgrRequest(session, requestType, &variableBindings,
&errorStatus, &errorIndex))
{
if (oid) free(oid);
SnmpMgrClose(session);
_RetInt(GetLastError(),10);
return 0;
}
else
{
// The API succeeded, errors may be indicated from the remote agent.
if (errorStatus > 0)
{
if (oid) free(oid);
SnmpMgrClose(session);
_RetInt(-5,10);
return 0;
}
else
{
// Display the resulting variable bindings.
RetType = (int) variableBindings.list[0].value.asnType;
// SnmpMgrClose(session);
// _RetInt(RetType,10);
// return 0;
switch (RetType){
case 1: // ASN_INTEGER32
// rezult = variableBindings.list[i].value.asnValue.number;
len = wsprintf ((char *) rezstr, '%d',
variableBindings.list[0].value.asnValue.number);
break;
case 2: //
// rezult = variableBindings.list[i].value.asnValue.unsigned32;
len = wsprintf ((char *) rezstr, '%d',
variableBindings.list[0].value.asnValue.unsigned32);
break;
case 3:
len = 4;
CopyMemory((char *) rezstr,'9993',len);
break;
case 4: // ASN_OCTETSTRING
len = variableBindings.list[0].value.asnValue.string.length;

if ((variableBindings.list[0].value.asnValue.string.stream[0] >> 4) > 0)
{
for (j=0; j < len; j++)
{
rezult += sprintf(rezstr + rezult,'%c',variableBindings.list[0].value.asnValue.string.stream[j]);
}
}
else
{
for (j=0; j < len; j++)
{
rezult += sprintf(rezstr + rezult,'%02x',variableBindings.list[0].value.asnValue.string.stream[j]);
}
}
break;
case 5: // ASN_NULL:
len = variableBindings.list[0].value.asnValue.bits.length;
// CopyMemory((char *)rezstr,
//variableBindings.list[0].value.asnValue.bits.stream, len);
strcpy(rezstr,variableBindings.list[0].value.asnValue.bits.stream);
break;
case 6:
len = 4;
CopyMemory((char *) rezstr,'9996',len);
break;
case 7:
len = variableBindings.list[0].value.asnValue.sequence.length;
// CopyMemory((char *)rezstr,
//variableBindings.list[0].value.asnValue.sequence.stream, len);
strcpy(rezstr,variableBindings.list[0].value.asnValue.sequence.stream);
break;
case 8: //
len = variableBindings.list[0].value.asnValue.address.length;
// CopyMemory((char *)rezstr,
//variableBindings.list[0].value.asnValue.address.stream, len);
strcpy(rezstr,variableBindings.list[0].value.asnValue.add
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru