一、段錯誤是什麼?
段錯誤指訪問的內存超出了系統給這個程序設定的內存空間,例如訪問了不存在的內存地址,訪問了系統保護的內存地址,訪問了只讀的內存地址等
二、一一舉例說明
- 訪問不存在的內存地址
#include<stdio.h>
void mian()
{
int *ptr = NULL;
*ptr = 0;
}
- 訪問系統受保護的內存地址
#include<stdio.h>
void main()
{
int *ptr = (int *)0;
*ptr = 100;
}
- 訪問只讀的內存地址
#include<stdio.h>
void main()
{
char *ptr = "test";
strcpy(ptr,"TEST");
}
- 棧溢出
#include<stdio.h>
void main()
{
main();
}
三、由於段錯誤產生core
1、core文件的簡單介紹
在一個程序崩潰時,它一般會在指定目錄下生成一個core文件。core文件是一個內存映像(同時加上調試信息),主要是用來調試的
2、開啓或關閉core文件的生成
- 阻止系統生成core文件:ulimit -c 0
- 開啓core文件生成:ulimit -c 1024或者 ulimit -c unlimited (該命令必須在管理員權限下)
3、使用core文件
在core文件所在目錄鍵入:gdb -c core 它會啓動GNU的調試器,來調試core文件,並且會顯示生成此core文件的程序名,終止此程序的信號等等,如果你已知道是由哪個程序生成的此core文件的,比如MyServer崩潰了生成core.12345,那麼用此指令調試:gdb -c core MyServer