У меня есть голая оболочка программы с реализованным классом «BasicObject» и классом генератора случайных чисел. Когда я запускаю программу, консоль сразу же закрывается, а функции cin, system("pause") и т.д. не действуют. Я подозреваю сбой, но не могу найти источник. Любая помощь?
Базовый объект.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;
}
Вот основная функция:
#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;
}
Если вы компилируете с помощью GCC , включите все предупреждения и отладочную информацию, поэтому используйте g++ -Wall -Wextra -g
. Затем используйте отладчик GDB
Ваш объект obj
не создан....
Это крах, потому что здесь
obj->get_id()
obj еще не инициализирован. Просто указатель на память с каким-то случайным мусором.
Вам нужно что-то вроде
BaseObject* obj = new BaseObject()
Прежде чем вы сможете использовать obj
Стоит отметить, что динамическое выделение BaseObject
здесь бессмысленно и подвержено ошибкам. ОП, вероятно, хочет просто объявить obj
как BaseObject obj;
. То же самое касается numGen
в BaseObject::BaseObject()
, который в настоящее время вызывает неопределенное поведение по той же причине.
Да, полностью согласен.
Спасибо, черт возьми, это заставляет меня чувствовать себя глупо. XD Ты святой.
Как вы думаете, куда будет указывать
BaseObject* obj;
? То же самое касаетсяRandNumGenerator* numGen;
вBaseObject::BaseObject()
. Я думаю, что у вас есть огромное недопонимание об указателях.