Код :: Блоки: Не удается открыть файл: ../libgcc/unwind-sjlj.c - PullRequest
0 голосов
/ 11 июня 2018

Я уже немного работаю над этим проектом и сталкиваюсь с этой проблемой, которую не могу решить.

В качестве предисловия программа создает двоичное дерево из данных изфайл, то дерево может расти, и новая полная информация записывается поверх этого исходного файла.

Чтобы сделать все это с одним информационным вектором, мой входной вектор должен быть упорядочен в порядке уровней, однако (насколько я понимаю, пожалуйста, исправьте меня, если я ошибаюсь), чтобыДля этого мне нужно, чтобы в моем векторе учитывались пустые пространства NULL, и чтобы все правильно переписать, мне нужны узлы faux-NULL (узлы, которые заполняют пространство, но не содержат никакой фактической информации, кроме указателей) в моем дереве.

Когда дерево растет, я пытаюсь завершить его и сбалансировать его с "NULL" узлами, и я делаю это рекурсивно с обходом в порядке и глубиной в памяти.Однако, когда я запускаю это, я получаю ошибку сегментации, и когда я запускаю ее шаг за шагом с помощью отладчика, я получаю

Cannot open file: ../../../../../src/gcc-4.9.2/libgcc/unwind-sjlj.c

специально.Это происходит, когда во время рекурсивного обхода алгоритм добавляет узел, и при достижении «возвратной» части распределителя памяти узла появляется ошибка, и программа прерывается.

Это ошибка с моимкод или это ошибка библиотек Code :: Blocks?

Соответствующий код:

struct Node
{
    int idx; //idx is information relevant to the program but not to the structure
    std::string phrase;
    Node* left, * right;
};

Node* newNode(std::string data, int idx) //memory allocator
{
    Node* node = new Node;
    node->phrase = data;
    node->idx = idx;
    node->left = node->right = NULL;
    return (node); //right here is where the debugger gives me the error
}

// Function to insert nodes in level order
Node* insertLevelOrder(std::string arr[], int idx[], Node* root,int i, int n)
{
    // Base case for recursion
    if (i < n)
    {
        Node* temp = newNode(arr[i],idx[i]);
        root = temp;

        // insert left child
        root->left = insertLevelOrder(arr,idx,root->left, 2 * i + 1, n);

        // insert right child
        root->right = insertLevelOrder(arr,idx,root->right, 2 * i + 2, n);
    }
    return root;
}

int calcularProfundidad(Node * root) //Sorry for the spanglish--this is "calculateDepth"
{
    if (root == NULL)
    {
        return 0;
    }
    int h1 = calcularProfundidad(root->left); //recursively calculate depth of left subtree
    int h2 = calcularProfundidad(root->right); //and of right subtree

    return 1 + max(h1,h2);
}

void rellenarNulos(Node * root, int prof, int counter) //fills "empty spaces" with "faux-NULL" nodes
{
    if(counter == prof) //if reaches depth, stops, if not, adds more nodes
        return;
    if(root->left == NULL && counter < prof)
    {
        Node * auxNode = newNode("NULL",0); //error in this call
        root->left = auxNode;
    }
    if(root->right == NULL && counter < prof)
    {
        Node * auxNode2 = newNode("NULL",0);
        root->right = auxNode2;
    }
    rellenarNulos(root->left,prof,counter++);
    rellenarNulos(root->right,prof,counter++);
}


#include <iostream>
#include <fstream>
#include <string>
#include "arbLib.hpp"

using namespace std;

int main()
{
    //Builds tree from file
    int N;
    fstream myfile ("test.txt");
    if (!myfile.is_open())
    {
        cout << "Unable to open file" << endl;
        return 0;
    }
    myfile >> N; //N is the number of nodes 
    string words[N];
    for(int i=0;i<N;i++)
        myfile >> words[i];
    int nums[N];
    for(int j=0;j<N;j++)
        myfile >> nums[j];
    myfile.close();

    //Builds tree from these vectors that are level order
    Node *root = insertLevelOrder(words,nums,root,0,N);


    int prof = calcularProfundidad(root); //calculates depth

    rellenarNulos(root,prof,1); //here is where the program dies 

    inOrder(root);

    destroyTree(root);

    cout << endl;
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...