Хорошо, это домашнее задание по хеш-таблицам, но я думаю, что это простая вещь, которую я смог сделать с ранних классов, и я вырываю волосы. Профессор недостаточно отзывчив, поэтому я решил попробовать здесь.
У нас есть хеш-таблица складских объектов. Складские объекты создаются следующим образом:
stock("IBM", "International Business Machines", 2573, date(date::MAY, 23, 1967))
мой конструктор выглядит так:
stock::stock(char const * const symbol, char const * const name, int sharePrice, date priceDate): m_symbol(NULL), m_name(NULL), sharePrice(sharePrice), dateOfPrice(priceDate)
{
setSymbol(symbol);
setName(name);
}
и setSymbol выглядит следующим образом: (setName является идентичным):
void stock::setSymbol(const char* symbol)
{
if (m_symbol)
delete [] m_symbol;
m_symbol = new char[strlen(symbol)+1];
strcpy(m_symbol,symbol);
}
и он отказывается размещать на линии
m_symbol = new char[strlen(symbol)+1];
с помощью std :: bad_alloc. имя и символ объявлены
char * m_name;
char * m_symbol;
Это определенно strlen (), который сбивается с пути. И, похоже, это не происходит каждый раз.
cout << symbol << strlen(symbol);
правильно возвращает IBM, затем вылетает