这道DFS的题目这样写哪错了?

运行之后在scanf那里显示段错误了。

不知道是不是分配内存那里错了?
数组那里写麻烦了已经晕了不知道这样用数组对不对

//Save 007----DFS:
//007位于坐标轴上(0,0)处的孤岛,现在他要踩着鳄鱼群到达大陆。已知他的最大跳跃为3m,鳄鱼数、鳄鱼群中每只鳄鱼的坐标(假设均为整数)和
//是否能经由这只鳄鱼到达岸边由外界输入。最后输出能否到达岸边。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MaxJump 3

//每只鳄鱼
struct Alligator{
    int x;              //坐标
    int y;
    bool AccessToBank;  //能否由这只鳄鱼到达岸边
    bool IfVisited;
};
typedef struct Alligator *PtrToAlli;

bool Save007(int x,int y,int AlliNum,PtrToAlli *AlliFlock);  //DFS
int distance(int x1,int y1,int x2,int y2);

int main()
{
    int AlliNum;            //鳄鱼数
    printf("please enter the number:");
    scanf("%d",&AlliNum);

    PtrToAlli *AlliFlock = malloc(sizeof(struct Alligator)*AlliNum);  //鳄鱼群
    printf("please enter the coordinate for each alligator(format:X Y IfAccessToBank)\n");
    for (int i = 0;i < AlliNum;i++)
    {
        scanf("%d %d %d",&AlliFlock[i]->x,&AlliFlock[i]->y,&AlliFlock[i]->AccessToBank);
        AlliFlock[i]->IfVisited = false;
    }

    if (Save007(0,0,AlliNum,AlliFlock))
        printf("Yes");
    else
        printf("No");

    return 0;
}

bool Save007(int x,int y,int AlliNum,PtrToAlli *AlliFlock){
    for (int i = 0;i < AlliNum;i++)
    {
        if (AlliFlock[i]->AccessToBank) 
            return true;
        else if ((distance(x,y,AlliFlock[i]->x,AlliFlock[i]->y) <= MaxJump) && AlliFlock[i]->IfVisited == false)
            AlliFlock[i]->IfVisited = true;
            return Save007(AlliFlock[i]->x,AlliFlock[i]->y,AlliNum,AlliFlock);
    }
    return false;
}
int distance(int x1,int y1,int x2,int y2){
    return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
}

scanf("%d %d %d",&(AlliFlock[i]->x),&(AlliFlock[i]->y),&(AlliFlock[i]->AccessToBank));

//Save 007----DFS:
//007位于坐标轴上(0,0)处的孤岛,现在他要踩着鳄鱼群到达大陆。已知他的最大跳跃为3m,鳄鱼数、鳄鱼群中每只鳄鱼的坐标(假设均为整数)和
//是否能经由这只鳄鱼到达岸边由外界输入。最后输出能否到达岸边。
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MaxJump 3
//每只鳄鱼
struct Alligator {
    int x;              //坐标
    int y;
    bool AccessToBank;  //能否由这只鳄鱼到达岸边
    bool IfVisited;
};
typedef struct Alligator *PtrToAlli;
bool Save007(int x, int y, int AlliNum, PtrToAlli AlliFlock);  //DFS
int distance(int x1, int y1, int x2, int y2);
int main()
{
    int AlliNum;            //鳄鱼数
    printf("please enter the number:");
    scanf("%d", &AlliNum);
    PtrToAlli  AlliFlock = (PtrToAlli )malloc(sizeof(struct Alligator)*AlliNum);  //鳄鱼群
    printf("please enter the coordinate for each alligator(format:X Y IfAccessToBank)\n");
    for (int i = 0; i < AlliNum; i++)
    {
        scanf("%d %d %d", &AlliFlock[i].x, &AlliFlock[i].y, &AlliFlock[i].AccessToBank);
        AlliFlock[i].IfVisited = false;
    }

    if (Save007(0, 0, AlliNum, AlliFlock))
        printf("Yes");
    else
        printf("No");
    system("pause");
    return 0;
}
bool Save007(int x, int y, int AlliNum, PtrToAlli AlliFlock) {
    for (int i = 0; i < AlliNum; i++)
    {
        if (AlliFlock[i].AccessToBank)
            return true;
        else if ((distance(x, y, AlliFlock[i].x, AlliFlock[i].y) <= MaxJump) && AlliFlock[i].IfVisited == false)
            AlliFlock[i].IfVisited = true;
        return Save007(AlliFlock[i].x, AlliFlock[i].y, AlliNum, AlliFlock);
    }
    return false;
}
int distance(int x1, int y1, int x2, int y2) {
    return (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2);
}

typedef struct Alligator *PtrToAlli;你把结构体别名成了指针类型,后面又用了指针,变成指针的指针。我现在把后面的指针使用取消了