Ваша проблема в том, что вы устанавливаете указатели на NULL (0), а затем разыменовываете их.Вы не можете разыменовать NULL.Хотите, вы хотите, больше похоже на это:
int main(int argc, char *argv[])
{
Person_t tmpPerson;
Person_t *p_list=0;
int count;
int i;
process_list(&count, &p_list);
tmpPerson = *p_list;
// and so on...
&
является оператором "address-of", который возвращает указатель на адрес переменной.Таким образом, он передает указатель на count
и p_list
, которые ваша функция затем использует для установки этих переменных, что, по-видимому, является тем, что вы хотите сделать.