C语言中变量使用的常见错误与全局变量分析
1. 经典错误:传递值而非指针
在C语言编程中,一个常见的错误是在调用 scanf
函数时传递变量的值而不是变量的指针。以下是示例代码:
#include <stdio.h>
int main()
{
int x;
printf ("Enter X:\n");
scanf ("%d", x); // BUG
printf ("You entered %d...\n", x);
return 0;
};
在这个例子中,变量 x
未被初始化,它包含来自局部栈的随机噪声。当调用 scanf
函数时,它会将用户输入的字符串解析为数字,并尝试将其写入 x
,但它将 x
视为内存地址。由于 x
的值是随机的, scanf
会尝试写入一个随机地址,这很可能导致程序崩溃。
有趣的是,一些调试版本的CRT库会在新分配的内存中填充一些明显的模式,如 0xCCCCCCCC
或 0x0BADF00D
。在这种情况下, x
可能包含 0xCCCCCCCC
, scanf
会尝试写入地址 0xCCCCCCCC
。如果你注意到程序试图写入这个地址