段错误

相信大多数在vc下的程序员不会对segmentation error太熟悉,因为vc下并没有给出具体的错误信息,只是在运行中给出提示框“程序.exe遇到问题需要关闭”。而且在编译过程中也没有给出任何的error和warning,相信vc在这方面稍微要薄弱一点。

庆幸在gcc则会给出具体的segmentation error。

其实通常的段错误都是由于解除引用一个未初始化或非法值的指针引起的。

 

下面是一段示例程序,将帮助你理解:

 

#include "stdio.h"

int main(int argc, char* argv[])
{
 printf("Hello World!/n");

 //session 1:解除引用一个未初始化或非法值的指针
 //试图往一个非法值的指针所指向的内存赋值
 int *p = NULL;
 *p = 16;

 //conclusion: 段错误通常是由于解除引用一个未初始化或非法值的指针引起的
 //很遗憾VC中并没有给出error或者warning,即使在运行中也没有给出明确的问题所在
 //只是提示程序.exe遇到问题需要关闭,相信这并没有给出太多有用的信息
 //值得庆幸的是,gcc中会给出segmentation error(core dump)
 //相信你得感谢它将你从地狱拉回天堂

 //一个更微妙的是,假如未初始化的指针恰好具有未对齐的值(对于指针所要访问的数据而言)
 //它将会产生总线错误。对于绝对大多数计算机而言确实如此,因为CPU总是先看到地址,
 //然后再把它发给MMU。
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值