Hi,
I have a dll and i think that has a memory leak.
The programs enter to this function everytime that i need to call the database.
This is the constructor and destructos of the class DBInterface.Code:// Create the thread-local DB Interface object if not done DBInterface *dbI = (DBInterface*) TlsGetValue(_tlsDBInterface); if (!dbI) { #ifdef DEBUG REPORT_INFO(EVMSG_TLSINIT,0,NULL); #endif dbI = new DBInterface(*g_settings); TlsSetValue(_tlsDBInterface,dbI); } ADODB::_RecordsetPtr recSet; int returnCode; recSet = dbI->NA_RD_AccesoRequest(pInAttrs,&returnCode);
this is the header file of the DBInterface.hCode:////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// DBInterface::DBInterface(SettingsManager &smgr) : m_settings(smgr), m_valid(false)/*, m_LRAttributeArray(NULL)*/,m_NA_RD_LRAttributeArray(NULL), m_ACAttributeArray(NULL), /*m_GPAttributeArray(NULL),*/m_ACUPAttributeArray(NULL),m_RechPCAttributeArray(NULL),m_RechCCAttributeArray(NULL), m_passwordOutputIndex(-1L) { } DBInterface::~DBInterface() { //if (m_LRAttributeArray) delete[] m_LRAttributeArray; //if (m_GPAttributeArray) delete[] m_GPAttributeArray; if (m_ACAttributeArray) delete[] m_ACAttributeArray; if (m_ACUPAttributeArray) delete[] m_ACUPAttributeArray; if (m_RechPCAttributeArray) delete[] m_RechPCAttributeArray; if (m_RechCCAttributeArray) delete[] m_RechCCAttributeArray; if (m_NA_RD_LRAttributeArray) delete[] m_NA_RD_LRAttributeArray; }
Do i need to delete all the SettingsManager::CommandParameter *Pointers that i have on the DBInterface Header, on the Destruction of the DBInterface ???Code:// DBInterface.h: interface for the DBInterface class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_DBINTERFACE_H__4B3AE378_BB57_4521_9AF3_F26A98A681BB__INCLUDED_) #define AFX_DBINTERFACE_H__4B3AE378_BB57_4521_9AF3_F26A98A681BB__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class DBInterface { public: DBInterface(SettingsManager &sm); virtual ~DBInterface(); // Run a login request // ADODB::_RecordsetPtr LoginRequest(CONST RADIUS_ATTRIBUTE *pInAttrs, BSTR *pwd = NULL); // Run a acceso request ADODB::_RecordsetPtr AccesoRequest(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run a acceso request IN TEL DATA NA_RD_ ADODB::_RecordsetPtr NA_RD_AccesoRequest(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run Recharge PC ADODB::_RecordsetPtr RechargePCAuth(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run Agrega cuentas pc ADODB::_RecordsetPtr AccountsPCAuth(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run Check Balance pc ADODB::_RecordsetPtr CheckBalancePC(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run Recharge Cards ADODB::_RecordsetPtr RechargeCards(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run Add Numbers pc ADODB::_RecordsetPtr AddNumbersPC(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run Recharge CC ADODB::_RecordsetPtr RechargeCCAuth(CONST RADIUS_ATTRIBUTE *pInAttrs, int *returnCode = NULL); // Run a password fetch request // BSTR GetPassword(CONST RADIUS_ATTRIBUTE *pInAttrs); // Handle an accounting stop packet void AccountingRequest(CONST RADIUS_ATTRIBUTE *pInAttrs); // Handle an accounting Update packet void AccountingUpdate(CONST RADIUS_ATTRIBUTE *pInAttrs); BOOL isValid(); protected: BOOL m_valid; ADODB::_CommandPtr m_CheckBalancePCCommand; _bstr_t m_CheckBalancePCConn; ADODB::_CommandPtr m_accesoRequestCommand; _bstr_t m_accesoRequestConn; ADODB::_CommandPtr m_NA_RD_accesoRequestCommand; _bstr_t m_NA_RD_accesoRequestConn; ADODB::_CommandPtr m_RechargePCAuthCommand; _bstr_t m_RechargePCAuthConn; ADODB::_CommandPtr m_AddNumbersPCAuthCommand; _bstr_t m_AddNumbersPCAuthConn; ADODB::_CommandPtr m_AccountsPCAuthCommand; _bstr_t m_AccountsPCAuthConn; ADODB::_CommandPtr m_RechargeCCAuthCommand; _bstr_t m_RechargeCCAuthConn; /* ADODB::_CommandPtr m_loginRequestCommand; _bstr_t m_loginRequestConn;*/ ADODB::_CommandPtr m_accountingCommand; _bstr_t m_accountingConn; ADODB::_CommandPtr m_AccountingUpdateCommand; _bstr_t m_AccountingUpdateConn; //ADODB::_CommandPtr m_getPasswordCommand; //_bstr_t m_getPasswordConn; ADODB::_CommandPtr m_RechargeCardsCommand; _bstr_t m_RechargeCardsConn; _variant_t m_passwordOutputIndex; _variant_t m_loginPasswordOutputIndex; // SettingsManager::CommandParameter *m_GPAttributeArray; // SettingsManager::CommandParameter *m_LRAttributeArray; SettingsManager::CommandParameter *m_NA_RD_LRAttributeArray; //ARRAY PARA EL ACCESSO REQUEST DE TEL_DATA SettingsManager::CommandParameter *m_ACAttributeArray; SettingsManager::CommandParameter *m_ACUPAttributeArray; SettingsManager::CommandParameter *m_RechPCAttributeArray; //RECHARGE PC SettingsManager::CommandParameter *m_RechCCAttributeArray; //CREDIT CARDS SettingsManager::CommandParameter *m_AccountsPCAttributeArray; //Accounts PC SettingsManager::CommandParameter *m_CheckBalancePCAttributeArray; //Balance of PC SettingsManager::CommandParameter *m_AddNumbersPCAttributeArray; //Add numbers from PC SettingsManager::CommandParameter *m_RechargeCardsArray; //Add Recharge Cards SettingsManager &m_settings; // Execute an ADO command and return the recordset ADODB::_RecordsetPtr CallCommand(ADODB::_CommandPtr cp, _bstr_t &connStr, SettingsManager::CommandParameter *attrArray, CONST RADIUS_ATTRIBUTE *pAttrs); }; #endif //
Could that be the memory leak ?
Thank you




Reply With Quote