Ваша main
функция в порядке. Ваша проблема в process_message
, где вы используете указатель на структуру, но не выделяете для нее память, обращаетесь к ней, а затем возвращаете ее. Объявление одного указателя не создает память для хранения структуры. Таким образом, вы должны выделить (например, malloc
) память для структуры, чтобы память «существовала» после завершения функции. Затем вы можете вернуть указатель на него, как вы делаете, а затем вы free
в основном, когда вы сделали с ним.
Возможно, есть лучшие способы для достижения цели, учитывая простую операцию, которую вы делаете. Один из них - сохранить одну «чистую» структуру в вашей функции main
и передать ее адрес в сообщение процесса:
struct point pt;
process_message(message, &pt);
printf("%s", pt.x);
Это будет «Повторно использовать» локальную память и не потребовать alloc / free. Обратите внимание, что вы ничего не возвращаете, вы просто «заполняете» структуру в функции процесса.
Наконец, если вы используете современную версию C, вы можете просто вернуть полную структуру из функции, если хотите:
struct point process_message(char* message)
{
struct point pt;
... do some processing ...
return pt;
}
И назовите это так:
struct point pt = process_message(message);