Ich versuche, einen Strukturbaum zu erstellen und meine Daten für die Baumknoten in die Struktur einzufügen, die zwei Datenbehälter enthält. Meine Baum/Datenstrukturen aussehen als solche:Speicherzugriffsverletzung Struktur in Baumstruktur einfügen C++
class BinarySearchTree
{
private:
struct IndexEntry
{
int acctID; // (key) Account identifier
long recNum; // Record number
};
struct tree_node
{
IndexEntry* entry;
tree_node* left;
tree_node* right;
};
tree_node* root;
public:
BinarySearchTree()
{
root = NULL;
}
bool isEmpty() const { return root == NULL; }
void insert(int, int);
int search(int);
int treeSearch(tree_node*, int);
};
Ich bin an diesem Punkt in meiner Insert-Funktion eine Speicherzugriffsverletzung erhalten, und um ehrlich zu sein, ist dies das erste Mal ist, dass ich einen Baum von Strukturen versuchen, so Ich habe keine Ahnung, ob es überhaupt eine korrekte Insert-Funktion ist. Aber hier ist es:
void BinarySearchTree::insert(int rNum, int aNum)
{
tree_node* t = new tree_node;
tree_node* parent;
t -> entry -> recNum = rNum; //right here I get a violation
t -> entry -> acctID = aNum; //but if I remove the assignments
t -> left = NULL; //it gives me a violation further down
t -> right = NULL;
parent = NULL;
if (isEmpty())
root = t;
else
{
tree_node* current;
current = root;
// Find the Node's parent
while (current)
{
parent = current; //This whole block will give me a memory violation
if (t -> entry -> recNum > current -> entry -> recNum)
current = current -> right;
else current = current -> left;
}
if (t -> entry -> recNum < parent -> entry -> recNum)
parent -> left = t;
else
parent -> right = t;
}
}
Bitte beachten Sie meine Kommentare im zweiten Block des Codes für die Standorte der Speicherzugriffsverletzungen. Ich denke, es gibt etwas nicht initialisiertes innerhalb des Codes, aber ich weiß nicht wirklich, wo es sein würde oder wie es zu initialisieren ist.
Jede Hilfe oder Richtung würde geschätzt werden!
Sie nie initialisiert ' t-> Eintritt ". – Barmar
Legen Sie keine Leerzeichen um '->', es ist nicht idiomatisch. – Barmar
Insbesondere nicht mit '>' Operator mischen. Sieht aus wie eine Reihe von Pfeilen. –