EDIT: Pastebin ссылается на весь код внизу
для моего курса CS215 мне дали класс под названием String215, который является базовым классом строк, чтобы помочь в понимании динамического распределения памяти и арифметики указателя с массивами символов.
Класс был предоставлен мне в очень простой скелетной форме с прототипами, но без реализаций, а также с тестовой функцией для проверки моих реализаций. Я НЕ МОГУ использовать какие-либо функции 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
Я почти уверен, что это как-то связано с моим очень плохим управлением памятью. Я знаю, что это не так много, но я боролся с этим часами подряд и, похоже, не могу понять это.
Вот вставка файла .cpp и .h для этой программы
string215.cpp: http://pastebin.com/Xh2SvDKJ
string215.h: http://pastebin.com/JfAJDEVN
Любая помощь очень ценится!
Спасибо, RAW-BERRY