2017-08-06 87 views
-1
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; 
} 

上述程序运行smootly直到输入(即,n)小于或等于6。如果我输入的n大于6则示出了运行时error.WHY?这里运行时错误取决于输入

+0

您使用的未初始化的变量'N'的值分配内存。在**'scanf()'之后''malloc()'需要放**。 – m0h4mm4d

+0

我建议你把你的代码里面的问题,而不是上传为图像。在SO中有一个代码标签,它对于c代码来说工作得非常好。 – m0h4mm4d

回答

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

欢迎SO。你的程序调用undefined behaviour(UB),当你做malloc(n * sizeof(int)),因为变量n没有初始化,读/使用UB未初始化变量的结果。

你觉得当你调用mallocn值会是什么? n甚至可能是一个负值。一旦你调用UB,就不知道你的程序会做什么。你应该把你给scanf呼叫你打电话之前malloc

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

+0

就是这样。 ____________ –

+0

@PeterJ你是什么意思? – babon

+0

它是关于你'main'此话 –

相关问题