fork download
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. struct Book {
  6. string name;
  7. };
  8.  
  9. struct TreeNode {
  10. float key;
  11. Book book;
  12. TreeNode* leftPtr;
  13. TreeNode* rightPtr;
  14. };
  15. class MyTree {
  16. TreeNode* rootPtr;
  17. // this function crashes!
  18. TreeNode* makeNode(float key,string bookName) {
  19. TreeNode* newNode = new TreeNode;
  20. if (newNode == NULL) {
  21. cout << "Error: No more space";
  22. }
  23. else {
  24. newNode->key = key;
  25. cout << newNode->book.name << endl;
  26. newNode->book.name = bookName;// CRASHES HERE
  27. cout << "Name: " << newNode->book.name;
  28. newNode->leftPtr = NULL;
  29. newNode->rightPtr = NULL;
  30. }
  31. return newNode;
  32. }
  33. TreeNode* insert(TreeNode* nodePtr, float key, string bookName) {
  34. if (nodePtr == NULL) {
  35. nodePtr = makeNode(key, bookName);
  36. }
  37. else if (key < nodePtr->key) {
  38. nodePtr->leftPtr = insert(nodePtr->leftPtr, key, bookName);
  39. }
  40. else if (key > nodePtr->key) {
  41. nodePtr->rightPtr = insert(nodePtr->rightPtr, key, bookName);
  42. }
  43. else { cout << "Error: Key already exist. Cannot add node."; }
  44. return nodePtr;
  45. }
  46. public:
  47. MyTree() { rootPtr = NULL; }
  48. void addNode() {
  49. // ask for input
  50. float key = 0; string bookName = "default";
  51. cout << "Enter a value for the key: ";
  52. cin >> key;
  53. cout << "Enter the name for the book: ";
  54. cin >> bookName;
  55.  
  56. // insert
  57. rootPtr = insert(rootPtr, key, bookName);
  58. }
  59. };
  60. int main() {
  61. MyTree a;
  62. a.addNode();
  63. }
Success #stdin #stdout 0s 15240KB
stdin
42 zika
stdout
Enter a value for the key: Enter the name for the book: 
Name: zika