问题:
“Segmentation violation”, “Bus error” 和“General protection fault” 意味着什么?
通常, 这意味着你的程序试图访问不该访问的内存地址, 一般是由于堆栈出错或是不正确的使用指针。
可能的原因有:
局部数组溢出(用堆栈分配的自动变量);
不小心, 用了空指针(参见问题5.2 和5.15)、未初始化指针、地址未对齐的指针或其它没有适当分配的指针(参见问题7.1 和7.2);
malloc 内部被破坏(参见问题7.16);
函数调用参数不匹配, 特别是如果用了指针, 两个可能出错的函数是scanf()(参见问题12.11) 和fprintf() (确定他的第一个参数是FILE *)。
参见问题16.3 和16.4。