C ++程序在Linux中运行,但不在Windows中运行

时间:2014-03-21 15:25:17

标签: c++ linux windows string std

我正在为大学写这个课程并且一直有问题。我写了在ubuntu中使用代码块,它运行良好没有错误或任何东西。但是当我在Windows上运行它在代码块上它崩溃并且我一直得到同样的错误"在抛出一个' std :: bad_alloc'的实例后终止被调用。什么<>:std :: badalloc'然后它停止工作。 任何帮助,将不胜感激! 谢谢 罗恩

的main.cpp

 #include <iostream>
#include "set.h"
using namespace std;

int main()
{

Set Set1;
List List1;
List1.header();


int choice = 0;
int value = 0;
cout<<"Press 1 to use a list or press 2 for a set"<<endl;
cin>>choice;
if(choice == 1) //List
{

    while(choice != 4)
        {
            value = 0;
            List1.menu();
            cin>>choice;
            switch(choice)
            {
                case 1:cout<<"Please enter value"<<endl;
                       cin>>value;
                       List1.set_value(value);
                break;
                case 2:List1.print_list();
                break;
                case 3:List1.test_copy_constructor();
                break;
            }

        }
}

else if(choice == 2) //Set
{
     while(choice != 4)
        {

            value = 0;
            List1.menu();
            cin>>choice;
            switch(choice)
            {
                case 1:cout<<"Please enter value"<<endl;
                       cin>>value;
                       Set1.set_value(value);
                break;
                case 2:Set1.print_list();
                break;
                case 3:Set1.test_copy_constructor();
                break;
            }

        }

}

else
{
    cout<<"Please Enter a valid option"<<endl;
}

 return 0;
}

set.cpp

#include "set.h"
#include <iostream>
#include <string>

using namespace std;

//Constructor
List::List()
{
  int array_size;
  int *array = new int[array_size];
  // delete [] array;

}
List List1;



//Print functions
void List::header(void) const
{
    cout<<"Program Name: Program 2"<<endl;
    cout<<"Program Created: March 20,2014"<<endl;
    cout<<"Created by: Ron Miller"<<endl;
    cout<<"--------------------------------"<<endl;
    cout<<"            "<<endl;
}


void List::menu(void) const
{
       cout<<"                         Menu"<<endl;
    cout<<"---------------------------------------------------------"<<endl;
    cout<<"1. Insert (value to be inserted is entered from keyboard)"<<endl;
    cout<<"2. Print List (all values, one per line)"<<endl;
    cout<<"3. Test Copy Constructor (pass list by value to a function"<<endl;
    cout<<"   and from within the function change all values in list"<<endl;
    cout<<"   to 0, then call Print List before function ends)"<<endl;
    cout<<"4. Quit"<<endl;
    cout<<"---------------------------------------------------------"<<endl;

}

//Modification Functions
void List::set_value(const int value)
{
    if (slot == 0) //If first run set array size
        {
        array = new int[array_size];
        }

    if (slot == array_size) //If array needs extended  save data in temp array expand original array then copy back to original
        {
        cout<<"EXPAND ARRAY"<<endl;
        temp_array = array;
        array_size = array_size + 2;
        array = new int[array_size];
        array = temp_array;
        }

    array[slot] = value; //Set current array slot to value
    slot = slot+1;
}


void List::print_list(void) const
{
int i = 0;
 cout<<"---------------"<<endl;
 while(i < slot)
        {
        cout<<array[i]<<endl;
        i = i+1;
        }
 cout<<"---------------"<<endl;
}

void List::test_copy_constructor(void) const
{
int* test_array;
test_array = array;
int i = 0;
test_array = new int[array_size]; //Copy original array to test_Array
 while(i < slot)                  //Set array to 0
        {
        test_array[i] = 0;
        i = i+1;
        }
 i = 0;

 cout<<"---------------"<<endl;
while(i < slot)                  //REMOVE THIS ONLY FOR TESTING PURPOSES
        {
        cout<<test_array[i]<<endl;
        i = i+1;
        }
        i = 0;
 cout<<"---------------"<<endl;
List::print_list();  //Print original array
}

void Set::set_value(const int value)
{
    array = get_array();        //Use get functions to obtain copies of private data
    temp_array = get_temp_array();
    array_size = get_array_size();
    temp_array_size = get_temp_array_size();
     slot = get_slot();
    char match;

     match = Set::search_array(value);
     if(match == 'y')
     {
        cout<<"Match"<<endl;
     }

     if(match == 'n')
     {

        if (slot == 0) //If first run set array size
            {
            array = new int[array_size];
            }

        if (slot == array_size) //If array needs extended  save data in temp array expand original array then copy back to original
            {
            cout<<"EXPAND ARRAY"<<endl;
            temp_array = array;
            array_size = array_size + 2;
            array = new int[array_size];
            array = temp_array;
            }
        array[slot] = value; //Set current array slot to value
        slot = slot+1;
        set_array(array);          //Use set values to update private data
        set_temp_array(temp_array);
        set_array_size(array_size);
        set_temp_array_size(temp_array_size);
        set_slot(slot);
    }
}
char Set::search_array(int value)
{
    array = get_array();
    array_size = get_array_size();
    slot = get_slot();
    int array_value;
    char match = 'n';
    int i =0;
    while(i < slot)          //Searches array for a match if there is return y otherwise return n
        {
            if( array[i] == value)
            {
                match = 'y';
            }
            else
            {
                match = 'n';
            }
        i = i+1;
        }
    return match;
}

//Set Functions
void List::set_array(int* value)
{
    array = value;
}
void List::set_array_size(int value)
{
    array_size = value;
}
void List::set_temp_array(int* value)
{
    temp_array = value;
}
void List::set_temp_array_size(int value)
{
    temp_array_size = value;
}
void List::set_slot(int value)
{
    slot = value;
}
//Get Functions

int* List::get_array(void) const
{
    return array;
}
int* List::get_temp_array(void) const
{
    return temp_array;
}

int List::get_array_size(void) const
{
    return array_size;
}
int List::get_temp_array_size(void) const
{
    return temp_array_size;
}

int List::get_slot(void) const
{
    return slot;
}

set.h

#ifndef set_H_INCLUDED
#define set_H_INCLUDED


class List
{
    public:
        //Constructor
        List();

        //Print Functions
        void header (void) const;
        void menu (void) const;
         //Modification Functions
        void set_value (const int);
        void print_list(void) const;
        void test_copy_constructor(void) const;


        //Set functions
        void set_array( int*);
        void set_temp_array(int*);
        void set_array_size( int);
        void set_temp_array_size(int);
        void set_slot(const int);
        //Get functions
        int* get_array (void) const;
        int* get_temp_array (void) const;
        int get_array_size (void) const;
        int get_temp_array_size (void) const;
        int get_slot(void) const;


    private:
       int array_size;
       int *array;
       int *temp_array;
       int temp_array_size;
       int slot = 0;


};

class Set : public List
{
public:
      //Modification Functions
      void set_value (const int);
      char search_array(const int);

private:
      int array_size = 2;
      int *array;
      int *temp_array;
      int temp_array_size = 2;
      int slot = 0;


};


#endif

1 个答案:

答案 0 :(得分:8)

List::List()
{
   int array_size;
   int *array = new int[array_size];
   // ...
}

array_size应该有什么价值?应该分配int数组的大小?

在我看来,这个局部变量声明是多余的;删除它,并使用成员变量。 (您已经在声明时将成员变量初始化为2,使用新的C ++ 11功能,允许您使用非static const的变量执行此操作。)

完成后,不要忘记回拨分配的内存。一般来说,我建议您使用std::vector