simpel ODBC kode fra C++ memoryleaker ?
Hej,Har et problem på XP og 2003, har ikke arbejdet med ODBC før, men tænkte at min opgave var simpel, jeg har installeret en Firebird database, installeret ODBC driveren til denne, oprettet tabeller etc. og så vil jeg fra et lille C++ program kunne indsætte data i denne database.
Det gik egentlig også fint nok, men så satte jeg det under stress og lagde mærke til at det leakede helt vildt.
Jeg har så søgt med lys og lygte på nettet, og faldt over denne her fra Microsoft, hvor de beskriver problemet ret rammende for det jeg oplever (bruger dog ikke Oracle):
http://207.46.248.248/kb/232351
Jeg prøvede at tage deres kode, og køre den i loops, og problemet er præcis detsamme, applikationen banker bare memory opad og NP pool, så det leaker voldsomt.
Nedenstående er programmet, og jeg har linket ODBC dll'en til projektet og funktionalitetsmæssigt fungerer det (jeg rammer databasen og kan skrive/læse i den), men den leaker.
Som sagt, kører XP med alle updates, MDAC 2.8.1 SP, firebird 2.0 den seneste ODBC driver til firebird, etc. etc. etc.
Er der nogen der kan hjælpe mig her ? håber det virkelig.
Below - kodesnippet:
#include <windows.h>
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>
#include <assert.h>
#define CK_RT(x) if( x != SQL_SUCCESS && x != SQL_SUCCESS_WITH_INFO) assert(0)
void main(){
HENV henv;
HDBC hdbc;
RETCODE rc = SQL_SUCCESS;
char *dsnStr="DSN=FireBirdTest;UID=sysdba;pwd=masterkey;";
short rtnLen = 0;
UCHAR rtnDSN[999] = "";
int i,x;
for (i=0; i < 100; i++)
{
rc = SQLAllocEnv(&henv);
rc = SQLAllocConnect(henv, &hdbc);
rc = SQLDriverConnect(hdbc,
NULL,
(unsigned char *)dsnStr,
strlen(dsnStr),
rtnDSN,
255,
&rtnLen,
SQL_DRIVER_NOPROMPT);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
}
}