我使用过这样的东西:
struct Node
{
char name[50];
Node *left,*right;
};
int main()
{
char cmd[10];
Node* p=NULL;
scanf("%s",&cmd);
if (p == NULL)
{
// do something
// THIS NEVER GETS EXECUTED
// WHYYYYY????
//THIS IS STRANGE
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,p在我读入cmd变量后,指针会改变它的值.我试图注释掉scanf代码,然后一切正常.很奇怪.
你有缓冲区溢出.
内存看起来像这样:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| | | | | | | | | | | | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
^ ^
cmd[10] p
Run Code Online (Sandbox Code Playgroud)
如果scanf读取超过10个字节,它将溢出到p.任何非零值都将使NULL检查失败,即使它不是有效指针.