这段代码可以在codeblock中返回正确的输出,但不会在黑客等级上返回。我没有得到这个问题?
#include <stdio.h>
int main()
{
int num,i;
long long unsigned int *num_alloc, FinalSum = 0;
num_alloc=(int*)malloc(sizeof(int)*num);
scanf("%d",&num);
for ( i=0;i<num;i++)
{
scanf("%llu",&num_alloc[num]);
FinalSum =FinalSum + num_alloc[num];
}
printf("%llu",FinalSum);
return 0;
}
答案 0 :(得分:4)
让我们来看看您的代码:
malloc(sizeof(int) * num)
,num
的价值是什么?scanf("%d",num)
,检查scanf
的返回值(scanf
成功解析的元素数量)for( i = 0 ; i < num; i++ )
,从i
到0
num
scanf("%llu",&num_alloc[num])
,读取数字并将其存储在num_alloc[num]
中(C中的数组索引从0
开始)FinalSum = FinalSum + num_alloc[num]
,将num_alloc[num]
添加到FinalSum
(参见#4)我提供了一些修改代码的建议。但是,您还需要存储在程序结束前读取的每个值吗?
此外,&#39; malloc&#39;是#stdlib.h&#39;的功能。而且你没有包含那个头文件。
答案 1 :(得分:3)
在为num_alloc
分配内存之前,必须初始化num
变量。如果没有,num_alloc
的内存将被分配一个垃圾箱大小,所以你有undefined behavior。
答案 2 :(得分:2)
关于你的代码,有很多事情向我发出。当num
未初始化时,您正在为num
个整数分配内存。它被赋予一个未定义的垃圾值。见undefined behavior。你必须将你的scanf语句放在malloc之前,因为现在它的代码没有意义。
for ( i=0;i<num;i++)
{
scanf("%llu",&num_alloc[num]);
FinalSum =FinalSum + num_alloc[num];
}
对于每个循环迭代,您正在访问数组的num
元素。这是不可能的,因为num_alloc
应该是num
整数的数组,并且C中的数组索引从0开始。但是我很确定你的意思是这个。使用您的代码,您可能会一遍又一遍地分配相同的值。
for (i = 0; i < num; i++) {
scanf("%llu", &num_alloc[i]);
FinalSum += num_alloc[i];
}
您还必须free()
使用malloc()
在堆上分配的任何内存。
free(num_alloc);