为什么这个C程序会崩溃?它汇编得很好

时间:2014-12-15 15:45:29

标签: c arrays

这个程序编译得很好。当我输入一个数字时,它会在我身上崩溃。 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;
}

3 个答案:

答案 0 :(得分:5)

scanf ("%i", &arrayMax);

使用&扫描到该地址。您需要将要扫描值的变量的地址传递给。在这种情况下,你的变量是arrayMax,你需要传递scanf()期望的这个变量的地址,在这种情况下你不是这样做的,并传递0,这不是你要扫描你的内存位置价值,所以你看到崩溃。 写入无效的内存位置会导致崩溃。

答案 1 :(得分:3)

您忘记在&参数中放置scanf运算符。

scanf ("%i", &arrayMax);  
          // ^Place unary & to specify the location.

答案 2 :(得分:1)

scanfvariadic function

因此,编译器无法确定传递给它的每个参数的类型是否正确(期望第一个参数的类型,显式声明为const char*)。

因此,决定从编译时“移动”到运行时,因此编译时错误可能会导致运行时错误。

例如,在scanf("%i")的情况下,函数需要int变量的地址。

在您的代码中,您传递的值为0,因此scanf将首先扫描用户输入,然后尝试将其写入该内存地址。

如果包含此地址的内存段没有 Write 访问权限(例如,如果程序的代码段位于该地址),则此尝试将产生内存运行期间访问冲突。

您可以将scanf("%i",arrayMax)更改为scanf("%i",&arrayMax)

,让它正常工作