Ok, ceci est fait pour les devoirs sur les hashtables, mais c'est la chose simple que je pensais pouvoir faire dans les classes précédentes, et je me suis arraché les cheveux. Le professeur n'est pas assez réactif, alors j'ai pensé que j'essaierais ici.Avoir des problèmes avec l'initialisation du tableau de caractères
Nous avons une table de hachage d'objets Stock objets.Le sont créés comme ceci:
stock("IBM", "International Business Machines", 2573, date(date::MAY, 23, 1967))
mon constructeur ressemble:
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);
}
et setSymbol ressemble à ceci: (setName est indentical):
void stock::setSymbol(const char* symbol)
{
if (m_symbol)
delete [] m_symbol;
m_symbol = new char[strlen(symbol)+1];
strcpy(m_symbol,symbol);
}
et il refuse t o allouer sur la ligne
m_symbol = new char[strlen(symbol)+1];
avec un std :: bad_alloc. le nom et le symbole sont déclarés
char * m_name;
char * m_symbol;
C'est certainement strlen() qui s'égare. Et ça ne semble pas arriver à chaque fois.
cout << symbol << strlen(symbol);
retourne IBM correctement, puis se bloque
nom et le symbole sont des variables de classe, ainsi que les paramètres de fonction dans le constructeur et la méthode setSymbol. Peut-être un peu confus. – quandrum
Faites un 'std :: cout << strlen (symbole)' avant la ligne qui échoue. Vérifiez que la valeur de longueur de chaîne a du sens. –
Vous devriez adopter une convention de nommage pour vos variables membres. Deux populaires sont 'memberVariable_' et' m_memberVariable'. Une telle convention facilitera la distinction des noms de paramètres et des noms de variables membres. –