Что происходит, так это то, что вы выходите за пределы при записи в вектор.
Вы не должны использовать C style [] для доступа к массиву, вместо этого вы должны использовать .at (index), потому что он выполняет проверку границ.
std::vector<std::vector<int>> strMat(str1.length()+1,std::vector<int>(str2.length(),0));
Внутренний вектор имеет размер str2.length ()
Здесь вы пишете на 1 элемент сверх его размера.
for(int j=0;j<=str2.length();j++){
strMat[0][j] = j;
У вас такая же проблема:
for(int i=1;i<=str1.length();i++){
for(int j=1;j<=str2.length();j++){ // j <= str2.length() will cause you to access elements in the vector that are outside of its bounds
Также здесь:
int ans = strMat[str1.length()][str2.length()];
Поскольку индексирование в c ++ основано на 0, когда вы создаете экземпляр вектора, чтобы иметь место для str2.length ( ), индекс последнего элемента будет иметь значение str2.length () -1
. Вы можете исправить эту проблему, изменив экземпляр вектора на str2.length () + 1 вместо str2. длина ():
std::vector<std::vector<int>> strMat(str1.length()+1,std::vector<int>(str2.length()+1,0));