请问这个程序为什么运行XXX.exe已停止工作?

纯业余新人,第一次提问,代码写得很差qwq

自己查了好几遍不知道哪里错了

希望能得到大佬们解答,也希望大佬们能多多指点

 

#include<iostream>
using namespace std;
struct node
{
    char rank,suit;
    struct node *left,*down,*up;
}card[53+3];
int N=52;
void move(int i)
{
    if(card[i].left ==NULL||card[i].up !=NULL) return;
    if((*(*card[i].left).left).left==NULL)
    {
        if(card[i].rank ==(*card[i].left).rank ||card[i].suit ==(*card[i].left).suit )
        {
            if(card[i].down ==NULL) N--;
            card[i].down =card[i].left;
            (*card[i].left ).up=&card[i];
            card[i].left =(*card[i].left).left;
            return move(i);
        }
    }
    else
    {
        if(card[i].rank ==(*(*(*card[i].left).left).left).rank||card[i].suit ==(*(*(*card[i].left).left).left).suit )
        {
            if(card[i].down ==NULL) N--;
            card[i].down =(*(*card[i].left).left).left;
            (*(*(*card[i].left).left).left).up=&card[i];
            card[i].left =(*(*(*card[i].left).left).left).left;
            return move(i);
        }
        else
        {
            if(card[i].rank ==(*card[i].left).rank ||card[i].suit ==(*card[i].left).suit )
            {
                if(card[i].down ==NULL) N--;
                card[i].down =card[i].left;
                (*card[i].left ).up=&card[i];
                card[i].left =(*card[i].left).left;
                return move(i);
            }
        }
    }
    return;
}
int main()
{
    int t=0,i,j,s=0;
    char a;
    for(i=1+3;i<=52+3;i++) cin>>card[i].rank>>card[i].suit;
    cin>>a;
    //输入 
    for(i=0;i<4;i++)
    {
        card[i].left =NULL;
        card[i].rank =0;
        card[i].suit =0;
    }
    card[1+3].left=NULL;
    for(i=2+3;i<=52+3;i++) card[i].left =&card[i-1];
    for(i=1;i<=52+3;i++)
    {
        card[i].down =NULL;
        card[i].up =NULL;
    }
    //初始化
    while(t!=52)
    {
        t=0;
        for(i=1+3;i<=52+3;i++)
        {
            if(card[i].up !=NULL||card[i].left ==NULL)
            {
                t++;
                continue;
            }
            if((*(*card[i].left).left).left==NULL)
            {
                if(card[i].rank !=(*card[i].left).rank &&card[i].suit !=(*card[i].left).suit )
                {
                    t++;
                    continue;
                }
            }
            else
            {
                if(card[i].rank !=(*(*(*card[i].left).left).left).rank&&card[i].suit !=(*(*(*card[i].left).left).left).suit )
                {
                    if(card[i].rank !=(*card[i].left).rank &&card[i].suit !=(*card[i].left).suit )
                    {
                        t++;
                        continue;
                       }
                }
            }
            move(i);
        }
    }
    //移动 
    cout<<N<<" piles remaining:";
    for(i=1+3;i<=52+3;i++)
        {
            if(card[i].up ==NULL)
            {
                j=i;
                while(card[j].down!=NULL)
                {
                    j++;
                    s++;
                }
                cout<<" "<<s+1;
            }
        }
    return 0;

1. 说明出错在哪里?  什么地方不符合你的期待? 

2. 简化程序, 从最简单的核心代码写起, 保证执行成功后再加新的语句, 持续测试

谢谢楼上的回复

语法编译没有问题。错误是编译运行时显示XXX.exe已停止工作。出错好像是在中间的while那一块,但是我自己一直查不出来。我自己检查的时候没找到哪里数组越界、指针越界、死循环,可能是我自己没看出来