c - 我不明白 malloc 函数

标签 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() 函数不正确(?)

最佳答案

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/

相关文章:

在 c 中创建一个具有超过 1 个动态大小数组的结构?

c - Malloc 堆栈溢出

c - 尽管在堆上分配,为什么指针地址返回到 0?

c - 在微 Controller 上用 C 语言加密/解密小消息

c - 在 C 结构体中的元素上使用 malloc

c - 类型的大小和内存分配

c - 函数中的结构和文件中的输出

c - 为什么 -2147483648 可以放入 int 时自动提升为 long?

检查正确接收的数据包数量 - Socket 编程

c - 我是否需要一个单独的线程来为主程序中的 while 循环设置计时器?