前幾天面試的時候,面試官問我,請大概講一講C++的core dump
當時我一臉懵逼,從來沒聽過。
於是決定了解一下core dump,起碼達到能夠面試的水平。
core dump 核心轉儲
進程終止運行時,操作系統會將此時進程的地址空間的內容、寄存器狀態、堆棧指針等進程狀態信息寫出的一個磁盤文件。
用途
用於調試,查找進程停止的原因
造成core dump的情況
內存訪問越界
- 由於使用錯誤的下標,導致數組訪問越界
- 搜索字符串時,依靠字符串結束符來判斷字符串是否結束,但是字符串沒有正常的使用結束符
- 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函數,將目標字符串讀/寫爆。應該使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函數防止讀寫越界。
多線程程序使用了線程不安全的函數。
多線程讀寫的數據沒有加鎖保護,多個線程讀寫一個全局數據
非法指針
- 空指針
- 隨意使用指針轉換