PDA

Visualizza la versione completa : [C++] Memoria e lettura registro


Murg
08-06-2012, 12:40
Ciao a tutti, ho un problema con la lettura di una stringa dal registro di sistema.

Ho ereditato un programma C++ da un altro programmatore (io non l'avevo mai utilizzato prima...) e sto provando ad eliminare alcuni bug che ci sono.

Ora il problema consiste nell'allocazione di memoria continua fino all'arresto dell'eseguibile, ho trovato quale parte del programma ha il problema, ma non riesco a capire che cosa non va.

questo il codice che non va (alloca memoria ma non la rilascia)



char * getRegKeyString(LPCTSTR subKey, LPCTSTR valueName) {

// Legge il percorso del file di configurazione dal registro di sistema
int ret;
HKEY hKey;
char Buffer[MAX_PATH];

DWORD dwBufLen=MAX_PATH;

char *pErrorMSG = new char[1000];
char *pKeyDir = new char[0xFF];
char *pKeyName = new char[0xFF];

ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_QUERY_VALUE, &hKey);
if( ret != ERROR_SUCCESS ) {
wsprintf(pErrorMSG,"[getRegKeyString] Impossibile accedere al Registro di Sistema (%s)(ERRORCODE=%d)", subKey, ret);
writeErrorEventLog(pErrorMSG);
};

ret = RegQueryValueEx( hKey, valueName, NULL, NULL, (LPBYTE) Buffer, &dwBufLen);
if ((ret != ERROR_SUCCESS) || (dwBufLen > MAX_PATH)) {
wsprintf(pErrorMSG,"[getRegKeyString] Impossibile leggere la chiave %s (ERRORCODE=%d)", valueName, ret);
writeErrorEventLog(pErrorMSG);
}

RegCloseKey(hKey);

//wsprintf(pErrorMSG,"[getRegKeyString] %s=%s", valueName, Buffer);
//writeInfoEventLog(pErrorMSG);

return Buffer;
}


Qualcuno di voi sa dirmi cosa c' che non torna?

Grazie
Ciao

oregon
08-06-2012, 12:55
Mi sembra evidente ... ci sono tre new ... quando fai le delete ?

Murg
08-06-2012, 13:04
Perfetto grazie, ora funziona!!

Loading