Функция в общем случае некорректна, потому что она не обрабатывает список, когда изначально переданный указатель на заголовок равен NULL.
И вы должны сделать копию переданной строки.
Более того, функция имеет тип возвращаемого значения, который отличается от void
, но ничего не возвращает.
Кроме этого, в этом операторе есть ошибка
current->next = (cplist*) malloc(sizeof(head));
Вы не выделяете память для узел. Вы выделяете память для указателя. Это не то же самое.
Функция может выглядеть следующим образом.
#include <stdlib.h>
#include <string.h>
//...
int cpl_add( cplist **head, const char *path )
{
cplist *current = malloc( sizeof( cplist ) );
int success = current != NULL;
success = success && ( current->path = malloc( strlen( path ) + 1 ) );
if ( !success )
{
free( current );
}
else
{
strcpy( current->path, path );
current->next = NULL;
while ( *head != NULL ) head = &( *head )->next;
*head = current;
}
return success;
}
И вызывать функцию, например, как
cpl_add( &head, argv[j] );