Хорошо, это для домашней работы о хэш-таблицах, но это простой материал, который, как я думал, я смог сделать из более ранних классов, и я вырываю волосы. Профессор недостаточно чувствителен, поэтому я решил попробовать здесь.Проблемы с инициализацией массива символов
У нас есть Hashtable фондового objects.The фондовых объектов создаются следующим образом:
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 является in indentical):
void stock::setSymbol(const char* symbol)
{
if (m_symbol)
delete [] m_symbol;
m_symbol = new char[strlen(symbol)+1];
strcpy(m_symbol,symbol);
}
и он отказывается от t о выделении на линии
m_symbol = new char[strlen(symbol)+1];
с станд :: bad_alloc. имя и символ объявлены
char * m_name;
char * m_symbol;
Это определенно strlen(), который сбивается с пути. И это, кажется, не происходит каждый раз.
cout << symbol << strlen(symbol);
возвращает IBM правильно, то выходит из строя
имя и символ являются переменными класса, а также параметры функции в конструкторе и метод setSymbol. Может быть, немного смущает. – quandrum
Сделайте 'std :: cout << strlen (символ)' перед неудачной строкой. Убедитесь, что значение длины строки имеет смысл. –
Вы должны принять соглашение об именах для ваших переменных-членов. Два популярных - 'memberVariable_' и' m_memberVariable'. Такое соглашение упростит идентификацию имен параметров и имен переменных-членов. –