У меня есть программа с целью поиска GCD двух строк S и t , то есть вернуть самый большой x такой, что x | s и x | t . При тестировании этой программы я столкнулся с кучей-буфером-переполнением . Я знаю, что эта ошибка подразумевает ошибку сегментации. Тем не менее, я не уверен, где в программе возникает эта ошибка. < /P>
string gcdOfStrings(string str1, string str2) {
const char *ptrI = str1.c_str(), *ptrJ = str2.c_str();
char *str3 = new char[1000 + 1], *ptrK = str3;
bool boolI = false, boolJ = false;
while (*ptrI == *ptrJ) { *ptrK++ = *ptrI++; }
ptrI = str1.c_str();
while ( (*ptrI != '\0') || (*ptrJ != '\0') || (*ptrK != '\0') ) {
if (*ptrK == '\0') { ptrK = str3; }
if (*ptrI != *ptrK) { boolI = true; }
if (*ptrI != '\0') { ptrI++; }
if (*ptrJ != *ptrK) { boolJ = true; }
if (*ptrJ != '\0') { ptrJ++; }
if ( (boolI != true) && (boolJ != true) ) { *ptrK = '\0'; string t(str3); delete[] str3; return t; }
ptrK++;
}
return "";
}
Пример 1:
Input: str1 = "ABCABC", str2 = "ABC"
Output: "ABC"
Пример 2:
Input: str1 = "ABABAB", str2 = "ABAB"
Output: "AB"
Пример 3:
Input: str1 = "ABABCB", str2 = "ABAB"
Output: ""
Подробнее здесь: https://stackoverflow.com/questions/780 ... h-pointers