我不了解malloc函数

时间:2018-11-02 16:31:54

标签: c malloc

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()功能不正确(?)

1 个答案:

答案 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);
}