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() 函数不正确(?)
最佳答案
unsigned int *elements = malloc(2*sizeof(int));
unsigned long fibs[elements];
您首先为 2 个整数分配空间。现在我不确定你想做什么,但下一行想要在大小为 elements
的堆栈上分配一个数组,但 elements
是一个指向 的指针未初始化的内存。那不可能(错误!)。
现在您测试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);
}
关于c - 我不明白 malloc 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53122494/