Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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++ 程序freez/loop_C++ - Fatal编程技术网

C++ 程序freez/loop

C++ 程序freez/loop,c++,C++,我遇到了以下问题,没有收到任何警告或错误,只是程序崩溃 当我在菜单中运行时,在dummyData初始化后打印全部。当我添加一个新学生时,它就开始循环学生菜单 域.h: template <class T> struct Array{ int length; T * M; Array( int size ) : length(size), M(new T[size]) { } ~Array() { delete[]

我遇到了以下问题,没有收到任何警告或错误,只是程序崩溃

当我在菜单中运行时,在dummyData初始化后打印全部。当我添加一个新学生时,它就开始循环学生菜单

域.h:

template <class T>
struct Array{
    int length;
    T * M;

    Array( int size ) : length(size), M(new T[size])
    {
    }
    ~Array()
    {
       delete[] M;
    }
};

template <class T>
struct Array{
    int length;
    T * M;

    Array( int size ) : length(size), M(new T[size])
    {
    }
    ~Array()
    {
       delete[] M;
    }
};

template <class T>
void addStudent(int a, int b, std::string c,Array <T> A){
    A.M[a].setStudent(a,b,c);
}

template <class T>
void DummyDataStudents(Array <T> A){
    for(int i=1; i<15; i++){
        A.M[i].setStudent(i, i,"student");
    }
    cout<<"Done Students"<<endl;
}
Menu.cpp:

void Menu::mainMenu(Array <Student> &DBst,Array <Assignment> &DBas){
showMainMenu();
int ret = Menu::intInputHandler();

switch(ret){
case 1:studentMenu(DBst,DBas);break;
case 2:assignmentMenu(DBst,DBas);break;
case 3:statsMenu(DBst,DBas);break;
case 4:_printAll(DBst,DBas);break;
case 0:break;
default:cout<<"Wrong option selected!";break;
}
Menu::mainMenu(DBst,DBas);
}



void Menu::studentMenu(Array <Student> &DBst,Array <Assignment> &DBas){
    showStudentMenu();
    int ret = Menu::intInputHandler();

    switch(ret){
    case 1:_addStudent(DBst);break;
    case 2:break;
    case 3:break;
    case 4:break;
    case 5:_printAllStud(DBst);break;
    case 6:break;
    case 0:mainMenu(DBst,DBas);break;
    default:cout<<"Wrong option selected!";break;
    }
    Menu::studentMenu(DBst,DBas);
}
Main.cpp:

int main(){
//Main function of the program

    DummyDataStudents(DBst);

    DBst.M[10].setStudent(1,10,"sadasd");     //works just fine
    DBst.M[10].printStudent();cout<<endl;

    Menu main;      
    main.mainMenu(DBst,DBas);

    DBst.~Array();
    DBas.~Array();

    return 0;
}
///我想这应该足够理解了。当我添加一个新学生时,我会循环打印菜单,直到它崩溃;如果我调用printall,我会直接崩溃。代码太长,请提供帮助并表示歉意。

这是一个问题:

template <class T> void addStudent(int a, int b, std::string c,Array <T> A){
数组A是按值传递的,所以它被复制,这意味着现在有两个数组实例指向同一个内部数组M,因为没有为数组定义复制构造函数,所以会生成默认的复制构造函数。addStudent返回时,函数的本地数组实例将删除内部数组M。这将使数组A的剩余实例保留一个悬空指针


要么实现我认为你不想做的复制构造函数和赋值运算符,要么让数组不可复制,将复制构造函数和赋值运算符声明为私有。

你做了什么来调试你的代码?耶稣之母:我厌倦了长时间盯着程序看。。。非常感谢。我浪费了3个小时的时间做了一个该死的参考:<再次感谢。新鲜的头脑总是有帮助的。
int main(){
//Main function of the program

    DummyDataStudents(DBst);

    DBst.M[10].setStudent(1,10,"sadasd");     //works just fine
    DBst.M[10].printStudent();cout<<endl;

    Menu main;      
    main.mainMenu(DBst,DBas);

    DBst.~Array();
    DBas.~Array();

    return 0;
}
template <class T> void addStudent(int a, int b, std::string c,Array <T> A){