EDIT: Pastebin ссылки на полностью кода в нижнейОшибка отладки! манипуляция Строка с использованием арифметики с указателями
для моей CS215 я, конечно, был дан класс под названием String215, который является базовым классом строки, чтобы помочь в понимании динамическое распределение памяти и арифметика указателя с массивами char.
Класс был предоставлен мне в очень простой форме скелета с прототипами, но не с реализациями, а также с тестовой функцией для проверки моих реализаций. Я НЕ МОЖЕТ использовать любые функции C String в этом назначении.
Часть программы, которая беспокоит, - это функция добавления, которая просто добавляет объект string215 параметра в конец текущего объекта string215.
// Add a suffix to the end of this string. Allocates and frees memory.
void string215::append(const string215 &suffix)
{
char *output = new char[str_len(data)+suffix.length()+1];
for(int x = 0; x < str_len(data); x++) {
*output = *data;
output++;
data++;
}
for(int x = 0; x < suffix.length(); x++) {
*output = suffix.getchar(x);
output++;
}
*output = '\0';
output -= (str_len(data)+suffix.length()+1);
delete[] data;
data = output;
}
Эта часть кода проверяется в 13-тест функции тестирования, как показано здесь:
string215 str("testing");
...
// Test 13: test that append works in a simple case.
curr_test++;
string215 suffix("123");
str.append(suffix);
if (strcmp(str.c_str(), "testing123") != 0) {
cerr << "Test " << curr_test << " failed." << endl;
failed++;
}
Вот описание класса дописывания:
Добавьте суффикс до конца этой строки. Выделяет новый, больший массив; копирует старое содержимое, за которым следует суффикс, в новый массив; затем освобождает старый массив и обновляет указатель на новый.
Моей программа прерывается в самом конце выполнения функции дописывания с сообщением об ошибке:
Debug Assertion Failed!
Program: [Source path]\dbgdel.cpp
Line: 52
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
...
Abort || Retry || Ignore
Я довольно уверен, что это что-то делать с моей очень плохим управлением памятью. Я знаю, что это не так много, но я боролся с этим целыми часами и не могу понять.
Вот Pastebin из .cpp и .h файл для этой программы
string215.cpp: http://pastebin.com/Xh2SvDKJ
string215.h: http://pastebin.com/JfAJDEVN
Любая помощь на всех очень ценится!
Спасибо, RAW-BERRY
Удивительное спасибо! Я понял мою оригинальную проблему, теперь она идет к следующей! Повреждение кучи T_T – user2125518