Alors voila je vous explique mon problème :
j'ai ecrit un programme en C qui suite à certain evenement envoi une requete SQL. Tous marche correctement sauf que la memoire utilisée (memoire virtuelle sous WinNT) par mon prog augmente de plus en plus.
je suis sure que c'est à cause de la connexion SQL parce que quand j'execute mon prog sans la connexion SQL sa taille n'augmente pas.
Je comprend vraiment pas pourquoi. Je pense que je désalloue tout correctement.
Si quelqu'un à une idée... merci beaucoup de m'aider.
Pour plus de détail, j'utilise une base de donnée mySQL et des liens ODBC.
mon code est le suivant :
- pour la connexion SQL
int connexion_SQL(int i)
{
SQLRETURN retcode;
/*Allocate environment handle */
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
/* Set the ODBC version environment attribute */
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
/* Allocate connection handle */
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
/* Set login timeout to 5 seconds. */
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)5, 0);
/* Connect to data source */
retcode=SQLConnect(hdbc,(SQLCHAR*)lienODBC,SQL_NTS,
(SQLCHAR*)user,SQL_NTS,
(SQLCHAR*)password,SQL_NTS);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
ttable[i].connect = TRUE;
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
return 1;
}
}
}
}
}
deconnexion_SQL();
return 0;
}
-pour la deconnexion :
void deconnexion_SQL(void)
{
if(hstmt){
if(SQLFreeHandle(SQL_HANDLE_STMT,hstmt) != SQL_SUCCESS) {
strcpy(erreur,"Erreur désallocation de handle STMT SQL");
}
}
if(ttable[0].connect == TRUE){
short ret = SQLDisconnect(hdbc);
if(ret!= SQL_SUCCESS && ret!=SQL_SUCCESS_WITH_INFO){
strcpy(erreur,"Erreur de déconnexion SQL");
}
}
if(hdbc){
if(SQLFreeHandle(SQL_HANDLE_DBC,hdbc) != SQL_SUCCESS){
strcpy(erreur,"Erreur de désallocation de handle DBC SQL");
}
}
if(henv){
if(SQLFreeHandle(SQL_HANDLE_ENV, henv) != SQL_SUCCESS) {
strcpy(erreur,"Erreur de désallocation de handle ENV SQL");
}
}
}
-ensuite pour envoyer ma requete :
if(connexion_SQL(i)){
retcode = SQLExecDirect(hstmt,(unsigned char *)requete, size); deconnexion_SQL();
}
voila