Ну, у вас здесь куча ошибок. Не уверен, что является причиной проблемы, но попробуйте исправить это:
Зачем использовать синоним, если вы не согласны?
ListNodePtr lastNode = malloc(sizeof(ListNode)+1);
ListNode *last = *sPtr;
Почему +1?
ListNodePtr lastNode = malloc(sizeof(ListNode)+1)
Это:
ListNode *last = *sPtr;
/* 2. put in the data */
last->data= malloc(strlen(value));
strcpy(last->data, value);
last->num = valore;
Вы перезаписываете значения узла, отправленного этому методу. Вероятно, намеревался использовать lastNode
Теперь вам нужно + 1
last->data= malloc(strlen(value));
Это то, что я вижу сейчас, не знаю, исправит ли это ошибку сегментации. Как происходит эта ошибка? Вы используете только этот метод? или вы делаете все виды манипуляций с данными? Может быть, проблема еще где. В любом случае, я посмотрю еще раз и увижу, замечу ли я что-нибудь еще.