====== Создать/удалить структуру в теле функции ====== #include #include #include #include #include typedef struct { char *name; char *surname; } Metainfo; // Создать структуру, используя двойной pointer reference bool mi_new(Metainfo **inst, char *name, char *surname) { *inst = (Metainfo *) malloc(sizeof(Metainfo)); if (*inst == NULL) return false; (*inst)->name = strdup(name); (*inst)->surname = strdup(surname); return true; } // Освободить и обнулить pointer reference void mi_free(Metainfo **inst) { free((*inst)->name); free((*inst)->surname); free(*inst); *inst = NULL; } // Работа с структурой void mi_set_name(Metainfo *mt, char *name) { free(mt->name); mt->name = strdup(name); } // Так-же работа с структурой void mi_print(Metainfo *mt) { printf("%s %s\n", mt->name, mt->surname); } // c.main int main() { Metainfo *meta; if (mi_new(&meta, "Eugene", "X")) { printf("0x%" PRIXPTR "\n", (uintptr_t) meta); mi_print(meta); mi_set_name(meta, "NewName"); mi_print(meta); mi_free(&meta); printf("0x%" PRIXPTR "\n", (uintptr_t) meta); return EXIT_SUCCESS; } else { fprintf(stderr, "Memory allocation failed"); return EXIT_FAILURE; } }