Как найти ошибку сегмента в указателе на функцию связанного списка указателя? - PullRequest
0 голосов
/ 08 апреля 2019

Я создаю три функции, которые позволяют мне по-разному вставлять в связанный список, используя указатель на формат указателя.Проблема в том, что я получаю ошибку сегмента в одной из этих функций, и 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;
}

Основная функция и остальная часть небольшой функции, которую я знаю, верны, но проблема, похоже, связана с одной из этих трех функций.Я ценю любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...