I'm trying to replicate a Binary Tree where the Nodes have a struct in its Node class. I can't seem to figure why it crashes when setting the bookName string. It keeps on crashing. Going to debug mode, it says it can't see the reference number or can't read the string.
#include <iostream>
#include <string>
using namespace std;
struct Book {
    string name;
};
struct TreeNode {
    float key;
    Book book;
    TreeNode* leftPtr;
    TreeNode* rightPtr;
};
class MyTree {
    TreeNode* rootPtr;
    // this function crashes!
    TreeNode* makeNode(float key,string bookName) {
        TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
        if (newNode == NULL) {
            cout << "Error: No more space";
        }
        else {
            newNode->key = key;
            cout << newNode->book.name << endl;
            newNode->book.name = bookName;// CRASHES HERE
            cout << "Name: " << newNode->book.name;
            newNode->leftPtr = NULL;
            newNode->rightPtr = NULL;
        }
        return newNode;
    }
    TreeNode* insert(TreeNode* nodePtr, float key, string bookName) {
        if (nodePtr == NULL) {
            nodePtr = makeNode(key, bookName);
        }
        else if (key < nodePtr->key) {
            nodePtr->leftPtr = insert(nodePtr->leftPtr, key, bookName);
        }
        else if (key > nodePtr->key) {
            nodePtr->rightPtr = insert(nodePtr->rightPtr, key, bookName);
        }
        else { cout << "Error: Key already exist. Cannot add node."; }
        return nodePtr;
    }
public:
    MyTree() { rootPtr = NULL; }
    void addNode() {
        // ask for input
        float key = 0; string bookName = "default";
        cout << "Enter a value for the key: ";
        cin >> key;
        cout << "Enter the name for the book: ";
        cin >> bookName;
        // insert
        rootPtr = insert(rootPtr, key, bookName);
    }
};
int main() {
    MyTree a;
    a.addNode();
}
The debug error message is this:
Exception thrown at 0x0121DA2E in Assessment.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD.
Please help
Edit 1:
Replaced the malloc as suggested but it crashes when setting the key variable.
TreeNode* makeNode(float key,string bookName) {
        cout << "Here";
        TreeNode* newNode = new TreeNode;// CRASHES HERE
        cout << "Here";
        if (newNode == NULL) {
            cout << "Error: No more space";
        }
        else {
            newNode->key = key;
            newNode->book.name = bookName;
            cout << "Name: " << newNode->book.name;
            newNode->leftPtr = NULL;
            newNode->rightPtr = NULL;
        }
        return newNode;
    }
 
     
    