works:programmer:allocate-struct-function
Создать/удалить структуру в теле функции
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <inttypes.h> 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; } }
works/programmer/allocate-struct-function.txt · Последнее изменение: 2024/04/25 04:24 — 127.0.0.1