c++参数中大字符串的分割错误

Segmentation Error for Large String in Parameter C++

本文关键字:分割 错误 字符串 参数 c++      更新时间:2023-10-16

我正在完成一个HW任务,学习来自Java的c++,并让代码工作,直到他们用整个葛底斯堡地址测试它,现在我得到段错误。我不知道如何解决这个问题,我试着用NEW关键字创建一个字符串,但仍然不能让事情嘶嘶作响。任何帮助都将非常感激。下面是给我带来问题的函数。

void PalindromeFinder::truncateToLargestPalindrome(string& inputString){
 //std::string *big = new std::string;
 //*big=inputString;
int n = inputString.length();
int longestBegin = 0;
int maxLen = 1;
bool table[1000][1000] = {false};
for (int i = 0; i < n; i++) {
    table[i][i] = true;
}
for (int i = 0; i < n-1; i++) {
if (inputString[i] == inputString[i+1]) {
  table[i][i+1] = true;
  longestBegin = i;
  maxLen = 2;
}
}
for (int len = 3; len <= n; len++) {
for (int i = 0; i < n-len+1; i++) {
  int j = i+len-1;
  if (inputString[i] == inputString[j] && table[i+1][j-1]) {
    table[i][j] = true;
    longestBegin = i;
    maxLen = len;
  }
}
}
if(largestPalindromeFound.length()<inputString.substr(longestBegin, maxLen).length()){
this->largestPalindromeFound = inputString.substr(longestBegin, maxLen);}
}

如果你的输入字符串大于999,那么你将开始访问只有1000x1000的table矩阵之外的内存位置。

访问分配内存之外的内存位置可能会导致分割错误,葛底斯堡地址长度超过1000个字符。