Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;程序在linux中运行,但不在windows中运行_C++_Linux_Windows_String_Std - Fatal编程技术网

C++ C++;程序在linux中运行,但不在windows中运行

C++ C++;程序在linux中运行,但不在windows中运行,c++,linux,windows,string,std,C++,Linux,Windows,String,Std,我正在为大学写这个程序,一直有问题。我在ubuntu中使用代码块写的,它运行良好,没有错误或任何东西。但是,当我在windows的代码块上运行它时,它崩溃了,并且我不断收到相同的错误“在抛出'std::bad_alloc'what:std::badalloc'实例后终止调用”,然后它停止工作。 任何帮助都将不胜感激! 谢谢你 罗恩 main.cpp #include <iostream> #include "set.h" using namespace std; int main

我正在为大学写这个程序,一直有问题。我在ubuntu中使用代码块写的,它运行良好,没有错误或任何东西。但是,当我在windows的代码块上运行它时,它崩溃了,并且我不断收到相同的错误“在抛出'std::bad_alloc'what: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;
}
array\u size
应该有什么值?应该分配多大的
int
数组

在我看来,这个局部变量声明是多余的;请删除它,然后使用成员变量(您已经在声明点将成员变量初始化为2,使用了新的C++11功能,该功能允许您使用非
静态常量的变量来执行此操作)


完成后,别忘了交回分配的内存。一般来说,我建议您使用
std::vector

您能将示例代码精简为一个(重点是简短的)为了让人们更容易发现错误,请在仍然看到错误的情况下尽可能多地删除。注意,我没有看到析构函数。也就是说,我没有看到它们
delete[]
array
,因此它们将泄漏该错误。
#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;
}
#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
List::List()
{
   int array_size;
   int *array = new int[array_size];
   // ...
}