Я пытаюсь реализовать некоторые функции, которые позволяют мне добавлять «Книги» в двоичное дерево поиска для класса «Студент», но я получаю странную ошибку:
msvcr100d.dll! strcmp (unsigned char * str1, unsigned char * str2) Строка 83 Asm
Программа полностью на C / C ++, поэтому я не уверен, почему она возвращает ошибку на языке ассемблера?Моя первая мысль - что-то не так с моим использованием strcmp, и стек вызовов показывает строку 188 в качестве последнего выполненного оператора (до вышеуказанной ошибки), что означает, что я, возможно, где-то испортил свою рекурсию.Я вызываю функцию insertBook () ученика, так что вот мой класс ученика.Любая помощь?Спасибо.
class Student : public Personnel { //inherit from Personnel
public:
Book *bookTree;
Book* searchBookTree(Book *bookNode, char *title) {
if ((strcmp(title, bookNode->title)) < 0) //***LINE 188
return searchBookTree(bookNode->left, title);
else if ((strcmp(title, bookNode->title)) > 0)
return searchBookTree(bookNode->right, title);
else
return bookNode;
}
void insertBook(Book *node) {
Book *newBook, *parent;
newBook = node;
newBook->left = NULL;
newBook->right = NULL;
if (bookTree == NULL) { //if bookTree is empty
bookTree = newBook;
}
else {
parent = searchBookTree(bookTree, newBook->title);
newBook->left = parent->left;
newBook->right = parent->right;
}
}
void printBooks(Book *top) {
Book *root = top;
if (root != NULL) {
printBooks(root->left);
cout << "BOOK LIST" << endl;
cout << "Title:\t\t" << root->title << endl;
cout << "URL:\t\t" << root->url << endl;
printBooks(root->right);
}
}
void display() {
Personnel::display();
cout << "STUDENT" << endl;
cout << "Level:\t\t" << getLevel() << endl;
printBooks(bookTree); cout << endl;
}
Student(char *cName, char *cBirthday, char *cAddress, char *cPhone, char *cEmail, level gradeLevel)
: Personnel(cName, cBirthday, cAddress, cPhone, cEmail)
{
bookTree = NULL;
setLevel(gradeLevel);
}
};