close掉乙個失效的MySQL連線導致的程式崩潰

2021-08-31 21:01:18 字數 835 閱讀 6780

這在沒有鏈結池控制的應用中十分常見,而我正好在做和mysql相關的開發工作,在一般的工具類應用中,並沒有使用鏈結池進行連線的管理,而是直接使用mysql提供的c api進行操作。而這給我的程式帶來過很多麻煩

比如**如下

int main() 

cout << mysql_ping(conn) << endl;

mysql_close(conn);

mysql_close(conn);

...}

當執行到第二個mysql_close(conn)時,程式就會報錯

test_conn(4768,0x7fffb7fff380) malloc: *** error for object 0x7fab7e000000: pointer being freed was not allocated

*** set a breakpoint in malloc_error_break to debug

即便是存在鏈結池,假設是我開發的鏈結池類,類封裝的不夠好,把連線控制代碼直接暴露給了使用者,使用者在使用完連線之後,歸還鏈結池之前,把這個連線,手動進行了釋放,那鏈結池在銷毀這個鏈結時,如果沒有做檢查,直接close掉,也會出現如上相同的問題

所以,最好的辦法就是,在任何關閉連線的操作前,進行連線存活狀態檢測。**可以修改為

int main() 

cout << mysql_ping(conn) << endl;

mysql_close(conn);

if(mysql_ping(conn) ==0 )//連線存活

...}

MySQL 安裝 乙個機器裝多版本的mysql

0.準備工作 先去下 對應版本的安裝包 zip,解壓到你的安裝目錄下 檔案根目錄下 新增my.ini配置檔案,內容如下 mysqld 設定3307埠 port 3307 設定mysql的安裝目錄 basedir d program files mysql mysql 5.7.32 winx64 設定...

講乙個索引失效應對措施的案例

create table staffs id int primary keyauto increment name varchar 24 not null default comment 姓名 age int notnull default 0comment 年齡 pos varchar 20 no...

Linux下命令列如何KILL掉乙個程序?

linux 的命令列裡面有用來停止正在執行的程序的所有所需工具。jack wallen 將為您講述細節。想像一下 你開啟了乙個程式 可能來自於你的桌面選單或者命令列 然後開始使用這個程式,沒想到程式會鎖死 停止執行 或者意外宕機。你嘗試再次執行該程式,但是它反饋說原來的程序沒有完全關閉。你該怎麼辦?...