关于#RuntimeerrorNZEC#的问题,如何解决?

题目要求:给定一个字符串 A 和一个字符串 B,求 B 在 A 中的出现次数。A 和 B 中的字符均为英语大写字母或小写字母。A 中不同位置出现的 B 可重叠。
输入格式:
输入共两行,分别是字符串 A 和字符串 B。
输出格式:
输出一个整数,表示 B 在 A 中的出现次数。
样例

img

数据范围与提示 1<=A,B的长度≤10^6,
,A,B仅包含大小写字母。

遇到问题:我在这OJ系统上面运行时出现的Runtime error(NZEC),这是语法问题吗?
编译器:C++(clang7.0.1)

img


#include
#include
int main()
{
 char a1[1000],b1[1000];
 int count=0;
    scanf("%s%s",a1,b1);
    for(int i=0;i<strlen(a1);i++)
    {
        if(a1[i]==b1[0])
        {
            int k=i+1,j;
            for(j=1;j<strlen(b1);j++,k++)
            {
                if(a1[k]!=b1[j])
                    break;
            }
            if(j==strlen(b1))
             count++;
        }
    }
    printf("%d\n",count);
    return 0;
}

因为a1没有初始化,所以超出zyzyzyz的部分都是无意义的,
当按程序a1运行到最后一个z时,你k=i+1,k=i+2 访问的是无意义的内容/内存

会不会是数组定义的问题,题目要求中A,B的长度<=10^6,定义应该是a[1000005]和b[1000005]吧。
(搦亟乱入,错了请别吐槽*_*)