valgrind 報告 ecpg記憶體洩露 四

2021-09-22 09:05:58 字數 1375 閱讀 3004

我執行測試後的結論是這樣的:確實發生了記憶體洩漏。沒有**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...