why does free(new_user) cause problems
int create_user(const char *name, User **user_ptr_add) {
    if (strlen(name) > 33) {
        return 2;
    }
    struct user *new_user = malloc(sizeof(struct user));
    strcpy(new_user->name, name);
    new_user->next = NULL;

    struct user *last = *user_ptr_add;
    while (last != NULL) {
        if (strcmp(last->name, name) == 0) {
            return 1;
        }
        last = last->next;
    }
    if (*user_ptr_add == NULL) {
        *user_ptr_add = new_user;
    }
    else {
        last = *user_ptr_add;
        while (last->next != NULL) {
            last = last->next;
        }
        last->next = new_user;
    }
    init(new_user);
    free(new_user);
    return 0;
}