Ваш псевдокод имеет утечек памяти , например,
char* a_message = (char*)malloc((size_t)246);
a_message = /*read the string somewhere*/
Это перезапишет указатель a_message
, поэтому он больше не будет указывать на память, зарезервированную malloc()
в предыдущей строке.Поэтому вы никогда не сможете free()
этой памяти.
Из всего, что показано в вашем вопросе, нет никакой причины использовать указатели вообще.Вы можете просто объявить свою структуру следующим образом:
typedef struct message
{
char message[246];
char sender_id[3];
} message;
и выделить ее целиком так:
message *msg = malloc(sizeof *msg);
Перед использованием убедитесь, что msg
не NULL
, malloc()
может произойти сбой ...
С помощью указателей вы должны выделить три отдельных блока:
typedef struct message
{
char *message;
char *sender_id;
} message;
// ...
// no error checking here for brevity, add the checks yourself:
message *msg = malloc(sizeof *msg);
msg->message = malloc(246);
msg->sender_id = malloc(3);