我執行測試後的結論是這樣的:確實發生了記憶體洩漏。沒有**sqlca區域。
因為,我修改了 /src/inte***ces/ecpg/ecpglib/misc.c的**後,
複製**
#ifdef enable_thread_safety
static void
ecpg_sqlca_key_destructor(void *arg)
static void
ecpg_sqlca_key_init(void)
#endif
struct sqlca_t *
ecpgget_sqlca(void)
return (sqlca);
#else
file *p5;
p5=fopen("gaoecpg.5","w+");
fclose(p5);
return (&sqlca);
#endif }
複製**
無論連線是成功還是失敗,都生成三個檔案:
gaoecpg.3,gaoecpg.4, gaoecpg.6
下面是我的測試程式 :
複製**
#include
#include
#include
int cm_connectdb(const char *dbuid,const char *dbpswd,const char *hostname,char *pcsqlerrm)
strcpy((char *)suserid.arr, dbuid);
suserid.len = (unsigned short)strlen((char *)suserid.arr);
strcpy((char *)spasswd.arr, dbpswd);
spasswd.len = (unsigned short)strlen((char *)spasswd.arr);
strcpy((char *)shostname.arr, hostname);
shostname.len = (unsigned short)strlen((char *)shostname.arr);
exec sql connect to :shostname as cm_dbconn user:suserid identified by :spasswd;
if (sqlca.sqlcode!=0)else
exec sql disconnect cm_dbconn;
return 0; }
int main()
複製**
雖然,按照網上的說法,理論上:執行緒結束的時候,就會自動呼叫pthread_key_create註冊的函式
但是至少我遇到的情況,並非如此。
valgrind 報告 ecpg記憶體洩露 二
真是原因到底是什麼呢?由於 exec sql connect 而導致 valgrind 報告 記憶體洩露錯誤。那麼在同乙個程式裡面,加入 exec sql disconnect 後,會如何呢?驗證的結果是,依然如此,還是會說 still reachable 220 bytes in 1 blocks...
valgrind 報告 ecpg記憶體洩露 四
我執行測試後的結論是這樣的 確實發生了記憶體洩漏。沒有 sqlca區域。因為,我修改了 src inte ces ecpg ecpglib misc.c的 後,ifdef enable thread safety static void ecpg sqlca key destructor void ...
valgrind 報告 ecpg記憶體洩露 二
真是原因到底是什麼呢?由於 exec sql connect 而導致 valgrind 報告 記憶體洩露錯誤。那麼在同乙個程式裡面,加入 exec sql disconnect 後,會如何呢?驗證的結果是,依然如此,還是會說 still reachable 220 bytes in 1 blocks...