这个程序编译得很好。当我输入一个数字时,它会在我身上崩溃。 name.exe has stopped working
但为什么?
int main (void) {
int arrayMax = 0;
printf ("How many numbers will be entered?\n");
scanf ("%i", arrayMax);
int i;
double userInput [arrayMax];
return 0;
}
答案 0 :(得分:5)
scanf ("%i", &arrayMax);
使用&
扫描到该地址。您需要将要扫描值的变量的地址传递给。在这种情况下,你的变量是arrayMax,你需要传递scanf()
期望的这个变量的地址,在这种情况下你不是这样做的,并传递0,这不是你要扫描你的内存位置价值,所以你看到崩溃。
写入无效的内存位置会导致崩溃。
答案 1 :(得分:3)
您忘记在&
参数中放置scanf
运算符。
scanf ("%i", &arrayMax);
// ^Place unary & to specify the location.
答案 2 :(得分:1)
scanf
是variadic function。
因此,编译器无法确定传递给它的每个参数的类型是否正确(期望第一个参数的类型,显式声明为const char*
)。
因此,决定从编译时“移动”到运行时,因此编译时错误可能会导致运行时错误。
例如,在scanf("%i")
的情况下,函数需要int
变量的地址。
在您的代码中,您传递的值为0,因此scanf
将首先扫描用户输入,然后尝试将其写入该内存地址。
如果包含此地址的内存段没有 Write 访问权限(例如,如果程序的代码段位于该地址),则此尝试将产生内存运行期间访问冲突。
您可以将scanf("%i",arrayMax)
更改为scanf("%i",&arrayMax)
。