C++ C++;控制台立即关闭,可能会崩溃(cin、系统(“暂停”)等无效)

C++ C++;控制台立即关闭,可能会崩溃(cin、系统(“暂停”)等无效),c++,console,crash,cin,C++,Console,Crash,Cin,我已经实现了一个程序的裸外壳,其中包含一个“BasicObject”类和一个randum数字生成器类。当我运行程序时,控制台立即关闭,cin功能、系统(“暂停”)等没有任何效果。我怀疑飞机坠毁了,但找不到可能的来源。有什么帮助吗 BaseObject.cpp: #include "BaseObject.h" #include "RandNumGenerator.h" #include <iostream> #include <strin

我已经实现了一个程序的裸外壳,其中包含一个“BasicObject”类和一个randum数字生成器类。当我运行程序时,控制台立即关闭,cin功能、系统(“暂停”)等没有任何效果。我怀疑飞机坠毁了,但找不到可能的来源。有什么帮助吗

BaseObject.cpp:

#include "BaseObject.h"
#include "RandNumGenerator.h"

#include <iostream>
#include <string>

using namespace std;

BaseObject::BaseObject() {

    RandNumGenerator* numGen;
    set_id(numGen->generate_randNum_str(5));
    delete numGen;

}

BaseObject::~BaseObject() {}

...

//void - sets value of string "id"
void BaseObject::set_id(string newId) {

    id = newId;

}
#包括“BaseObject.h”
#包括“RandNumGenerator.h”
#包括
#包括
使用名称空间std;
BaseObject::BaseObject(){
RandNumGenerator*numGen;
设置id(numGen->generate_randNum_str(5));
删除numGen;
}
BaseObject::~BaseObject(){}
...
//void-设置字符串“id”的值
void BaseObject::set_id(字符串newId){
id=newId;
}
以下是主要功能:

#include <iostream>
#include <string>

#include "BaseObject.h"

using namespace std;

int main() {

    string userIn = "";
    BaseObject* obj;

    while (userIn != "q") {

        cout << "Id of \"obj\" is " << obj->get_id() << endl;
    
        cout << endl << "Type 'q' to quit." << endl;
        cin >> userIn;

    }

    return 0;

}
#包括
#包括
#包括“BaseObject.h”
使用名称空间std;
int main(){
字符串userIn=“”;
BaseObject*obj;
while(userIn!=“q”){

cout您的
obj
对象未实例化….

您的
obj
对象未实例化….

它正在崩溃,因为

obj->get_id() 
obj还没有初始化。只是一个指向内存的指针和一些随机垃圾

你需要像这样的东西

BaseObject* obj = new BaseObject()

在使用obj之前,它会崩溃,因为这里

obj->get_id() 
obj还没有初始化。只是一个指向内存的指针和一些随机垃圾

你需要像这样的东西

BaseObject* obj = new BaseObject()

在使用obj之前

您认为
BaseObject*obj;
将指向哪里?在
BaseObject::BaseObject()中的
RandNumGenerator*numGen;
也是如此
。我认为您对指针有很大的误解。如果您使用enable all warnings and debug info编译,那么请使用
g++-Wall-Wextra-g
。然后使用调试器您认为
BaseObject*obj;
将指向哪里?对于
RandNumGenerator*numGen;
BaseObject::BaseObject()中也是如此
。我认为您对指针有很大的误解。如果您使用enable all Warning和debug info编译,那么请使用
g++-Wall-Wextra-g
。然后使用Debugger。值得一提的是,在这里动态分配
BaseObject
是毫无意义且容易出错的。OP可能只想声明
obj
作为
BaseObject obj;
BaseObject::BaseObject()中的
numGen
也是如此
,它目前引发了同样原因的未定义行为。是的,完全同意。谢谢你,天哪,这让我觉得自己很笨。XD你是圣人。值得一提的是,动态分配
BaseObject
在这里是毫无意义且容易出错的。OP可能只想将
obj
声明为
baseobjectobj;
BaseObject::BaseObject()
中的
numGen
也是如此,因为同样的原因,它目前会引发未定义的行为。是的,完全同意。谢谢你,天哪,这让我觉得自己很傻。XD你是个圣人。