Chodzi o funkcję, która wstawia element o zadanym kluczu do stworzonego już drzewa.
Funkcja sypie się (nie zawsze, ale tak średnio w 80% przypadków) w miejscu oznaczonym w kodzie (piszę w DevCpp, więc kompilator GCC).
Używając debuggera, udało mi się tylko tyle dowiedzieć, że wskaźnik curr przybiera dość w chwili błędu dziwną wartość 0xfeeefeee. Z tego co udało mi się wygooglować, może to oznaczać jakiś błąd pamięci na stosie. Próbowałem zwiększyć rozmiar stosu, bo z tego co wiem, w Windowsie wynosi on chyba 2 MB (doradzono mi, aby w ustawieniach linkera dodać zwiększyć rozmiar stosu, próbowałem zarówno komendą --stack, jak i --heap, zwiększyłem do kilkudziesięciu MB i nic...). Już sam nie wiem, co z tym robić. Kod wydaje się być poprawny, nie rozumiem, dlaczego się sypie. Czy ktoś mógłby na to zerknąć i pomóc? Bardzo mi na tym zależy.
void insValToBinTree(binTreeNode *root, int valToIns) {
binTreeNode *curr = root;
binTreeNode *newItem = NULL;
while (curr != newItem) {
while ((curr != newItem) && (valToIns <= (curr -> value))) {/* check left child */ /* WYSYPUJE SIĘ ZAWSZE NA TEJ LINII */
if (curr -> left == NULL) /* if no node in the right child */
curr -> left = newItem = allocBinTreeNode(valToIns, curr); /* insert */
curr = curr -> left; /* turn left, possibly to newNode (then procedure will stop) */
}
while ((curr != newItem) && (valToIns > curr -> value)) { /* check right child */
if (curr -> right == NULL) /* if no node in the right child */
curr -> right = newItem = allocBinTreeNode(valToIns, curr); /* insert */
curr = curr -> right; /* turn right, possibly to newNode (then procedure will stop) */
}
}
}
</quote>