关于c语言向链表插入元素的问题

大家好,我现在遇到的问题是当向结构体中插入新的朋友时不会报错但直接退出程序。看了半天不知道是什么原因导致的,麻烦会的朋友帮忙看看了,谢谢大家。

#include 
#include
#include 


typedef struct users{
  int numoffriend;
  char name[50];
  char relation[50][100];
  struct users* next;
}users;

struct users* headpointerglobal;

void insert(char name[50], int* numofuser,struct users** head){
  struct users* cur_node;
  struct users* pre_node;
  struct users* new_node;
  int volume = sizeof(struct users);

  new_node = (struct users*)malloc(volume);
  strcpy(new_node->name,name);
  if(*head == NULL){
    *head = new_node;
    new_node->next = NULL;
    (*numofuser)++;
  }
  else{
    cur_node = *head;
    pre_node = NULL;
    int i =0;
    while(cur_node != NULL && strcmp(name,cur_node->name)>0 && i <*numofuser){
      pre_node = cur_node;
      cur_node = cur_node->next;
      i++;
    }
    new_node->next = cur_node;
    if(pre_node == NULL){
      *head = new_node;
    }
    else{
      pre_node->next = new_node;
    }
    (*numofuser)++;
  }
}

void delete(char name[50],int* numofuser,struct users** head){
  struct users* pre_node = NULL;
  struct users* cur_node = (struct users*)malloc(sizeof(struct users));
  cur_node = *head;
  if (strcmp(cur_node->name,name)==0){
    *head = cur_node->next;
    (*numofuser)--;
    free(cur_node);
  }
  else{
    while(cur_node!= NULL && strcmp(cur_node->name,name)!=0){
      pre_node = cur_node;
      cur_node = cur_node->next;
    }
    if(cur_node == NULL){
      printf("user not found\n");
    }
    else{
      pre_node->next = cur_node->next;
      (*numofuser)--;
      free(cur_node);
    }
  }
}

void relationship(char name[50],char friendname[50],struct users** head){
  struct users* cur_node = *head;
  int col = 0;
  int i = 0;
  int j = 0;
  int result =0;
  int row;
  
  while(cur_node != NULL && strcmp(cur_node->name,name) != 0){
    cur_node = cur_node->next;
  }
  printf("1\n");
  if(cur_node ==NULL){
    printf("user not found\n");
  }
  else{
    if(cur_node->numoffriend == 0){
      row = 0;
      printf("1\n");
    } 
    else{
      row = (cur_node->numoffriend)-1;
      for( i = 0;i<(cur_node->numoffriend);i++){
        result = strcmp(cur_node->relation[i][j],friendname[j]);
      }
    }
  }
  printf("1\n");
  if(result != 0){
    while(friendname[col] != 0){
      cur_node->relation[row][col] = friendname[col];
      col++;
    }
    cur_node->numoffriend++;
    printf("%s\n",cur_node->relation[row]);
  }
  else{
    printf("Friend exist\n");
  }
}

int savetofile(struct users** head){
  int counter=0;
  char username[50];
  char friendname[50];
  struct users* cur_node = *head;
  int col =0;
  FILE *fp = fopen("database.txt","w");
  if(fp == NULL){
    printf("Failed to open file\n");
    return 1;
  }
  else{
    while(cur_node != NULL){
        strcpy(username,cur_node->name);
        fputs(username,fp);
        fputs("\n",fp);
        if(cur_node->numoffriend != 0){
          for(int j = 0;j<(cur_node->numoffriend);j++){
            strcpy(friendname,cur_node->relation[j]);
            fputs(friendname,fp);
            if(j<(cur_node->numoffriend)-1){
              fputs(";",fp);
            }
          }
        }
      cur_node = cur_node->next;
      fputs("\n",fp);
    }
  }
  fclose(fp);
}


int main(){
  char username[50];
  int choice;
  int numberofuser = 0;
  struct users* pointer = NULL;
  headpointerglobal =NULL;
  while(1){
    printf("enter choice\n");
    scanf("%d",&choice);
    if(choice == 1){
      printf("enter username\n");
      scanf("%s",username);
      insert(username,&numberofuser,&headpointerglobal);
      printf("%d\n",numberofuser);
    }
    if(choice== 2){
      pointer = headpointerglobal;
      while(pointer != NULL){
        printf("%s\n",pointer->name);
        pointer = pointer->next;
      }
    }
    if(choice == 3){
      printf("enter username to remove\n");
      scanf("%s",username);
      delete(username,&numberofuser,&headpointerglobal);
      printf("%d\n",numberofuser);
    }
    if(choice == 4){
      char friendname[50];
      printf("enter username to add friend\n");
      scanf("%s",username);
      printf("enter friends's name\n");
      scanf("%s",friendname);
      relationship(username,friendname,&headpointerglobal);
    }
    if(choice == 5){
      savetofile(&headpointerglobal);
    }
    if(choice ==6){
      break;
    }
  }
  return 0;
}

你是怎么测试出来问题的,测试步骤可以描述下