int main (int argc, char** argv)
{
unsigned int i;
unsigned int *elements = malloc(2*sizeof(int));
unsigned long fibs[elements];
if (argc != 2){
printf("Usage: %s <# of elements>\n", argv[0]);
return 0;
}
compute_fibs (fibs, &elements);
for (i=0; i<elements; i++) {
printf ("fibs[%i]: %lu\n",i, fibs[i]);
}
printf("Displaying %u fibs\n", elements);
}
这是main.c文件
当我编译时会出错
我想执行./main 50这样的文件
并打印50个斐波那契值。
所以我要添加元素(在本例中为50)
但是我的malloc()功能不正确(?)
答案 0 :(得分:2)
unsigned int *elements = malloc(2*sizeof(int));
unsigned long fibs[elements];
您首先为2个整数分配空间。现在,我不确定您要做什么,但是下一行要在大小为elements
的堆栈上分配一个数组,但是elements
是指向 uninitialzed 内存的指针。那不可能是(错误!)。
现在您测试if (argc != 2)
,因此argv[1]
显然应该包含数字元素。然后,您必须首先将其转换为int,使用它来分配该数量的元素。然后,您可以调用compute_fibs
函数。
所以您可能想要类似的东西:
int main (int argc, char** argv)
{
unsigned int i;
unsigned int elements;
unsigned long *fibs;
if (argc != 2){
printf("Usage: %s <# of elements>\n", argv[0]);
return 0;
}
elements= atoi(argv[1]);
fibs = malloc(elements*sizeof(*fibs)); // See Chux's comment
compute_fibs (fibs, elements);
for (i=0; i<elements; i++) {
printf ("fibs[%i]: %lu\n",i, fibs[i]);
}
printf("Displaying %u fibs\n", elements);
}