首页 > 解决方案 > 我不明白 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() 功能不正确(?)

标签: cmalloc

解决方案


unsigned int *elements = malloc(2*sizeof(int));
unsigned long fibs[elements];

您首先为 2 个整数分配空间。现在我不确定你想做什么,但下一行想要在 size 的堆栈上分配一个数组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);
}

推荐阅读