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 · Last modified: 2024/04/25 04:24 by Chugreev Eugene