运行时提示string subcript of range

初学KMP,自己简单的实现了一下,编译没有问题,但是运行时终止了

代码如下:

#include<iostream>
#include<string>
using namespace std;
void GetNext(string& T, int* next)
{
int i = 0;
int j = -1;
next[0] = -1;
int tmp = T.size();
while (i < tmp)
{
	//T[j]为前缀单个字符,T[i]为后缀单个字符
	if ((j == -1) || (T[j] == T[i]))
	{
		++i;
		++j;
		next[i] = j;
	}
	else
	{
		//j回溯
		j = next[j];
	}
}
}

int GetKMP(string& X, string& T)
{
int* next = new int[100];
//i用于主串S当前位置的下标值
int i = 0;
//字串T中当前位置的下标值
int j = 0;
GetNext(T, next);
int tmp1 = T.size();
int tmp2 = X.size();
while ((i < tmp2) && (j < tmp1))
{
	//两字母相等则继续
	if ((j == -1) || (X[i] == T[i]))
	{
		++i;
		++j;
	}
	else
	{
		j = next[j];
	}
}
delete[] next;
if (j == tmp1)
{
	return i - j;
}
else
{
	return -1;
}
}

int main()
{
string X = "abcababca";
string T = "cababc";
cout << GetKMP(X, T) << endl;
return 0;
}

这个错误是要对string初始化吗?可是我在对形参的string初始化:string X=“”之后还是一样,到底是哪出了问题?

这样是没问题的好像,我的错误应该是在

把T[i]换为T[j]就好了,不过还是感谢您的建议

你把string类型,当作char数组用了,方法的定义参数应该换为char数组,而不是string