找有多少个字符子串的问题,每次都是在第三个报错

#include
#include
#include
using namespace std;
#define MAXLEN 1000
int main()
{
int i, j, N, NC, count, flg1, flg2;
cin >> N >> NC;
string str;
cin >> str;
char * a[MAXLEN],*temp;
for (i = 0; i < MAXLEN; i++)
a[i] = new char[N+1];
temp = new char[N + 1];
flg1 =flg2= 0;
int len = str.size();

for (i = count = 0; i < len-N+1; i++)
{
    if (flg1 == 0)
    {
        for (j = 0; j < N; j++)
            a[count][j] = str[i+j];
        a[N] = '\0';
        count++;
        flg1 = 1;
        continue;
    }

    for (j = 0; j < N; j++)
        temp[j] = str[i + j];
    temp[N] = '\0';

    for (j = 0; j < count; j++)
        if (strcmp(temp, a[j]) == 0)
        {
            cout << "hahaha" << endl;
            flg2 = 1;
            break;
        }
    cout << count << endl;
    if (flg2 == 0)
    {
        for (j = 0; j < N; j++)
            a[count][j] = temp[j];
        a[count][N] = '\0';
        count++;
    }   

    flg2 = 0;
}
cout << count << endl;
return 0;

}

这是一个程序,输入字符串str,找出str中有多少个不同的字符子串
N是字串的长度,NC是str里面不同字母的种数(我没用到)
count是一个变量,表示不同的子串的个数
现在问题来了,我在循环里面加了测试语句,每次都是count=3的时候给我报错,我真的不懂为什么会这样,还求各位高手指点指点

你输入的n是多少?