Я создаю три функции, которые позволяют мне по-разному вставлять в связанный список, используя указатель на формат указателя.Проблема в том, что я получаю ошибку сегмента в одной из этих функций, и GDB не сообщает мне, где они по какой-то причине.Любые предложения о том, где они могут быть?
// This is the function where I can insert to the front:
void insertAtHead( List *list, int val )
{
Node **link = &( list->head );
Node *n = (Node *)malloc(sizeof(Node));
n->value = val;
n->next = *link;
list->length++;
}
//This is the function where I can insert at the end.
void insertAtTail( List *list, int val )
{
Node **link = &( list->head );
Node *n = (Node *)malloc(sizeof(Node));
Node *temp;
n->value = val; // Link the data part
n->next = NULL;
temp = *link;
while(temp->next != NULL)
temp = temp->next;
temp->next = n; // Link address part
list->length++;
}
//This function lets me insert the value by finding the largest value and putting the given value before it.
void insertSorted( List *list, int val )
{
Node **link = &( list->head );
Node *n = (Node *)malloc(sizeof(Node));
Node *temp;
n->value = val; // Link the data part
n->next = NULL;
temp = *link;
while(temp->next != NULL || val < temp->value)
temp = temp->next;
temp->next = n; // Link address part
list->length++;
}
// Lastly, the main function:
int main( int argc, char *argv[] )
{
FILE *fp;
if ( argc != 2 || ( fp = fopen( argv[ 1 ], "r" ) ) == NULL ) {
printf( "Can't open file: %s\n", argv[ 1 ] );
exit( EXIT_FAILURE );
}
{
List list = { NULL, 0 };
int val;
while ( fscanf( fp, "%d", &val ) == 1 )
insertAtHead( &list, val );
printList( &list );
freeList( &list );
}
fseek( fp, SEEK_SET, 0 );
{
List list = { NULL, 0 };
int val;
while ( fscanf( fp, "%d", &val ) == 1 )
insertAtTail( &list, val );
printList( &list );
freeList( &list );
}
fseek( fp, SEEK_SET, 0 );
{
List list = { NULL, 0 };
int val;
while ( fscanf( fp, "%d", &val ) == 1 )
insertSorted( &list, val );
printList( &list );
freeList( &list );
}
fclose( fp );
return EXIT_SUCCESS;
}
Основная функция и остальная часть небольшой функции, которую я знаю, верны, но проблема, похоже, связана с одной из этих трех функций.Я ценю любую помощь!