在C中结构的Malloc

Jac*_*son 3 c malloc

我有一个结构:

struct numbers_struct {
char numbers_array[1000];
};

struct numbers_struct numbers[some_size];
Run Code Online (Sandbox Code Playgroud)

创建struct后,有一个整数作为输入:

scanf("%d",&size);
Run Code Online (Sandbox Code Playgroud)

我需要使用malloc(size)并指定数组的大小.(而不是some_size使用大小)

在C中这样的事情可能吗?

hmj*_*mjd 5

是的,但malloc()需要数组的内存总量,而不是元素的数量:

struct numbers_struct* numbers = malloc(size * sizeof(*numbers));
if (numbers)
{
}
Run Code Online (Sandbox Code Playgroud)

请注意,您必须检查scanf()使用前的返回值size(在这种情况下这是一个糟糕的名称),否则代码可能会使用未初始化的变量,如果scanf()失败:

int number_of_elements;
if (1 == scanf("%d", &number_of_elements))
{
    struct numbers_struct* numbers =
        malloc(number_of_elements * sizeof(*numbers));
    if (numbers)
    {
        free(numbers); /* Remember to release allocated memory
                          when no longer required. */
    }
}
Run Code Online (Sandbox Code Playgroud)

在C99中引入了可变长度数组,但是它们的使用存在限制(例如,它们不能在文件范围内使用).