在C语言中,经常会碰到由于指针问题导致系统重启。内部的原因大部分是因为指针没有初始化,指针赋值错误,指针栈空间被其他数据踩了。
对于前面的几个,一般比较容易定位。现在,分享一下由于栈空间被踩导致的系统重启。这通常是一个非常难定位的问题,因为你不知道到底哪块代码会踩了你的栈。解决这个问题,首先确保编出来的栈中,指针上下的数据也好函数也好不会覆盖指针的内容。如果,你已经确定不会覆盖指针内容,但是确实是指针的问题那么肯定就是代码中,在memset,memcpy这些地方不小心把指针的内容覆盖了。这时候,最好能够找到重启时的调试信息,在特定的地方排查。如果不能,只有好好地review代码了。
文笔和水平有限,就说这么多了。
struct A
{
char data[100];
int *ptr;
} ;
int main()
{
int dawoa = 9;
int keyima = 8;
Struct A a;
a.ptr = &dawoa;
memset(a.data,0,100+4);
memcpy(a.ptr,&keyima,4);//好像要崩溃啦
}