前言
如果你是一个写过一些C程序的同学,那么很大可能你会遇到魔幻的segmentation fault,可能一时间抓耳挠腮,本篇文章主要介绍一些常见的导致segmentation fault的代码问题,希望能够帮助大家快速定位问题!
出现Segmentation Fault的常见操作
写只读数据
#include <stdio.h> |
|
char* str= "hello world"; |
|
int main() {
|
|
printf("%s\n", str); |
|
*str = '1'; |
|
return 0; |
|
} |
在上面的程序当中,str
是一个全局变量,一个指向只读数据hello world
的指针,因为指向的数据存放在只读数据区,如下图所示(rodata区域):
数组下标越界
#include <stdio.h> |
|
int main() {
|
|
int arr[10]; |
|
arr[1 << 20] = 100; // 会导致 segmentation fault |
|
printf("arr[n] = %d\n", arr[1 << 20]); // 会导致 segmentation fault |
|
return 0; |
|
} |
栈溢出 stakc_overflow
我们可以使用ulimit -a
命令查看,系统的一些参数设置,比如说栈的最大大小:
➜ cod |