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

#c

#c

Вопрос:

Итак, я думаю, я уже видел, что вы можете выделить память в C внутри структуры, поэтому вам не нужно делать это при создании переменной. в основном

 typedef struct Data{
    //Any Arbitrary data
    char *name;

} Data;

int main(void){
    Data* x = (Data*) malloc(sizeof(Data));
}
 

Есть ли какой-то способ, которым я могу сделать это изнутри структуры, например:

 typedef struct Data{
    (Data*) malloc(sizeof(Data));//<---Something to allocate memory?

    //Any Arbitrary data
    char *name;

} Data;

int main(void){
    Data* x;
    Data* y;
    Data* z;
}
 

Комментарии:

1. Насколько мне известно, вы не можете этого сделать. Если вам нужно динамическое пространство, вы должны это сделать.

2. Возможно, вы думаете о конструкторе C .

Ответ №1:

Вы только что обнаружили необходимость в классах, которые переносят ресурсы и концепцию конструктора!

В стандарте C. Это невозможно сделать. Если вам нужны такие функции, лучше всего попробовать C или, возможно, использовать какое-нибудь расширение C. Например, у GCC есть атрибут cleanup.

В неидиоматическом C это будет выглядеть так:

 struct Data {
    char *name;

    Data() {
        name = (char*) malloc(sizeof(char)*100);
        // it will allocate 100 bytes to the string everytime.
    }

    // other things to avoid leaking memory, copying the class, etc.
};

int main() {
    Data x; // allocates
    Data y; // also allocates
}
 

Этот пример показывает, как вы могли бы выделить для name в C , но вы также можете выделить для Data себя. В C есть утилиты, std::unique_ptr<Data> которые сделают это за вас.

Комментарии:

1. Спасибо за знания! 🙂