项目中需要用到sqlite来存储一些临时数据,sqlite本来我就不熟,还好老外的东西文档比较齐全。所以在这边花的时间还不算长,最崩溃的是,调试程序的时候出现在main函数的结尾出现了段错误。gdb 调试了半天,也跟踪不出来,core文件也显示在main函数的结尾。。
最终的问题竟然是 main函数内的一个数据出现越界的情况,为了测试这个结论,我写了如下程序
1 #include<stdio.h>
2 #include<string.h>
3 int main()
4 {
5 char test[10];
6 int i=0;
7 int sum=0;
8 sprintf(test,"123456789101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
9 /*
10 test数组明显越界,但是编译器在不会在此处报错
12 */
13 for(i=0;i<100;i++)
14 {
15 sum+=i;
16 }
/* 这里你可以做一些其事情,这里的代码完全正确*/
17 return 0;
18 } /*gdb 调试发现错误出现在这一行*/
至于这个问题的原因,等我有空了进一步考证一下。
这个例子告诉我们段错误有可能滞后发生,所以写代码时一定要小心。。。。。
转自 (http://hi.baidu.com/ycyanyan6/item/90819b844749a0c998255fbc)