请各位帮我康康代码出现了什么问题,一运行就停止工作

模拟动态数组的顺序表↓


#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
template<typename t>
class link{
public:
    t obj[LINK_MAXN]={NULL};//所有元素
    t len=0;//长度
    void add(link &li,t obj,int place)//插入元素
    {
        if(place<0||place>=li.len)return;
        if(li.len>=LINK_MAXN)return;
        li.len++;
        for(int i=place;i<li.len-1;i++)
            li.obj[i+1]=li.obj[i];
        li.obj[place]=obj;
    }
    void del(link &li,t obj=NULL,int place=NULL)//删除元素(可使用位置删除或元素删除)
    {
        if(obj==NULL&&place==NULL)
            return;
        int oll= -1;
        if(place==NULL){
        for(int i=0;i<li.len;i++)
            if(li.obj[i]==obj)
            {oll=i;break;}
        if(oll<0)
            return;
        }
        else{
            oll=place;
            if(place>LINK_MAXN||place<0)
                return;
        }
        li.len--;
        for(int i=oll;i<li.len-1;i++)
            li.obj[i]=li.obj[i+1];
    }
    void change(link &li,t yb,t main_)//更改元素
    {
        int place= -1;
        for(int i=0;i<li.len;i++)
            if(li.obj[i]==yb)
            {place=i;break;}
        if(place<0)
            return;
        else
            li.obj[place]=main_;
    }
    long int findf(link li,int obj)//查找元素
    {
        for(int i=0;i<li.len;i++)
            if(li.obj[i]==obj)
                return i;
        return NULL;
    }
    void print(link l)//打印顺序表
    {
        for(int i=0;i<l.len;i++)
            printf("%d ",l.obj[i]);
        printf("\b \b\n");
        system("pause");
    }
};
int main(){
    link<int> a1;
    a1.add(a1,13,0);
    a1.add(a1,13,1);
    a1.del(a1,13);
    a1.print(a1);
    return 0;
}

就是以上这段代码,一直试都是显示“程序.exe已停止工作”,麻烦各位大佬帮我看看哪出了问题,谢谢!