Перезапись объектов в C ++

0

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

Я разработал алгоритм, и мой main() работает правильно на первой итерации, но seg неисправностей сразу после этого (вы должны иметь возможность непрерывно запускать программу и имитировать алгоритм без необходимости запускать ./main again, следовательно, цикл while).

У меня есть ощущение, что это связано с тем, что мое BinaryTree *tree создается и используется в первом раунде, а затем снова используется без освобождения, но мои попытки обойти это были бесплодны.

Здесь моя основная проблема:

#include <iostream>
using namespace std;
#include "BinaryTree.h"
/* Prompts user to pick an option: 
 * first fit, best fit, or quit 
*/



int main (){

    bool quit;
    int command, elements, binSize, x, totalNodes;
    cout<<"Welcome to assignment 6!"<<endl;


    BinaryTree *tree = new BinaryTree();
    //Declare new tree for use in first fit algorithm

    while (!quit)
    {
      cout<<"Choose an option for the test: 1-> First fit, 2-> Best Fit, 3-> Quit"<<endl;
      cin>>command;

        /**************
            First Fit
        **************/

        if(command==1)
        {       
            cout<<"First Fit!\n";
            cout<<"Enter number of objects: ";
            cin>>  elements;
            cout<<"Enter capacities of bins: ";
            cin>>  binSize;
            cout<<"\n";



            x=1; 
            while (elements > x)    //Get next highest power of 2 
                x=x*2;      //to fill out bottom of binary tree

            totalNodes = 2*x -1;
            for(int i=1; i<=totalNodes; i++)
            {
                //cout<<"Adding node: "<<i<<endl;
                tree->AddItem(i, -1);
            }

            bool done = false;
            //elements = x;
            int a[elements];
            for (int i=1; i<=elements; i++)
            {
                cout<<"Enter space requirement of object "<<i<<endl;
                cin>>a[i];
            }

            for (int i=1; i<=elements && !done; i++)
            {
                tree->Insert(a[i], binSize, elements);
            }

               //Loop done, seg faults happens when called again
        }

Файл BinaryTree.cpp немного длинный, поэтому я свяжу их здесь, если это необходимо: http://pastebin.com/EtwdBp8N

Любые советы или информация о плохой практике очень ценятся.

  • 1
    Обычно такими проблемами являются использование без инициализации, переполнение выделенной памяти или использование после освобождения.
  • 2
    скомпилировать с -g и использовать GDB
Показать ещё 6 комментариев
Теги:
object
algorithm
segmentation-fault

2 ответа

2
        int a[elements];
        for (int i=1; i<=elements; i++)
        {
            cout<<"Enter space requirement of object "<<i<<endl;
            cin>>a[i];
        }

Этот бит неверен, массивы основаны на нулевом значении в C/C++, цикл должен быть:

        for (int i=0; i<elements; i++)
0

Если отладчик не помогает, попробуйте запустить свою программу с valgrind http://valgrind.org/ или что-то подобное. Он будет идентифицировать многие недопустимые обращения к памяти для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню