Как структура может иметь динамически распределенные члены в C?

Я попытался динамически выделить объект в качестве члена структуры с этим кодом:

#include <stdlib.h>
#define width 4

struct foo{
     int* p1 = malloc(sizeof(*p1) * width);   
};

но компиляторы, clang и gcc, выдают ошибку:

error: expected ':', ',', '', '}' or '__attribute__' before '=' token

когда я пытаюсь скомпилировать код; вот ссылка: https://godbolt.org/z/-Sy6CK .

Мой вопрос:

  • Как я могу создать структуру, которая имеет динамически распределенные члены в C?

Всего 2 ответа


Вы хотите это:

#include <stdlib.h>
#define width 4

// declaration, you can't do initialisation here
struct foo{
     int* p1;
};

int main()
{
  struct foo bar;

  bar.p1 = malloc(sizeof(*bar.p1) * width);   
}

Или это:

struct foo{
     int* p1;
};

int main()
{
  struct foo bar = {.p1 = malloc(sizeof(*bar.p1) * width)};
}

или

int main()
{
    struct {
        int* p1;
    } bar = {.p1 = malloc(sizeof(*bar.p1) * width)};
}

Есть идеи?

10000