我使用过这样的东西:
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
}
}
基本上,在我读入p
变量后,指针cmd
会改变它的值。我试图注释掉scanf
代码,然后一切正常。很奇怪。
答案 0 :(得分:8)
你有缓冲区溢出。
内存看起来像这样:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| | | | | | | | | | | | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
^ ^
cmd[10] p
如果scanf读取超过10个字节,它将溢出到p
。任何非零值都将使NULL检查失败,即使它不是有效指针。