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