为什么在这个程序运行时错误取决于输入的值?

时间:2017-08-06 04:08:51

标签: c runtime runtime-error dynamic-memory-allocation

https://i.stack.imgur.com/kU6lD.png

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{
    int i,n,*a=(int*)malloc(n*sizeof(int)); 
    scanf("%d",&n); 
    for(i=0;i<n;++i) 
    scanf("%d",(a+i)); 
    for(i=0;i<n;++i) 
    printf("%d",*(a+i));
    free(a); 
    return 0; 
}

上面的程序运行顺畅,直到输入(即n)小于或等于6.如果输入n大于6则表示运行时错误.WHY?这里运行时错误取决于输入值??)< / p>

2 个答案:

答案 0 :(得分:0)

在顶部试试这个:

int i = 0;
int n = 0;
int *a = NULL;
scanf("%d", &n);
if(n > 0) {
    a = (int*)malloc(n * sizeof(int));
    if(!a) {
        printf("malloc failed");
        return 0;
    }
}
else {
    printf("enter number > 0");
    return 0;
}

答案 1 :(得分:-1)

欢迎来到SO。当您执行malloc(n * sizeof(int))时,您的程序会调用undefined behaviour(UB),因为变量n未初始化,读取/使用未初始化的变量会导致UB。

当您致电n时,您认为malloc的价值是什么? n甚至可能是负值。一旦你调用UB,就无法确定你的程序会做什么。在致电scanf之前,您应该致电malloc

您的main功能标准投诉。 Why?从下次开始,请将您的代码直接放在问题中。