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>
答案 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?从下次开始,请将您的代码直接放在问题中。