У меня есть программа с целью поиска 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
Столкнулся с переполнением куча во время итерации с указателями ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1741505784
Anonymous
У меня есть программа с целью поиска 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 "";
}
[b] Пример 1: [/b]
Input: str1 = "ABCABC", str2 = "ABC"
Output: "ABC"
[b] Пример 2: [/b]
Input: str1 = "ABABAB", str2 = "ABAB"
Output: "AB"
[b] Пример 3: [/b]
Input: str1 = "ABABCB", str2 = "ABAB"
Output: ""
Подробнее здесь: [url]https://stackoverflow.com/questions/78057747/encountered-a-heap-buffer-overflow-while-iterating-with-pointers[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия