您好我尝试了一切我能想到的修复崩溃......但是没有得到任何结果。所以我会尝试粘贴程序的主要组件,所以也许有人可以帮助这个...程序编译没有错误但它崩溃。
如果我运行程序,请先输入选项'1',然后输入输入...当它到达save
部分时,它就会崩溃。代码的某些部分被注释掉ebcuase我试图找出崩溃的结果。如果我忘了某些东西或者你需要soem其他细节请询问
SORRY为长代码。
主要功能和应用程序类:
#include "Catalog.h"
#include "UIconsole.h"
#include "StudentRepository.h"
#include "StudentValidator.h"
using namespace std;
class Application{
private:
StudentRepository *stre;
StudentValidator *stvl;
Catalog *cat;
UIconsole *ui;
public:
Application();
~Application();
void run();
};
int main(){
Application app;
app.run();
return 0;
}
Application::Application(){
StudentRepository stre();
StudentValidator stvl();
Catalog cat();
UIconsole ui();
}
Application::~Application(){
}
void Application::run(){
ui->runUI();
}
UIconsole.h(输入是choisen):
class UIconsole{
public:
UIconsole(Catalog *catalog):catalog(catalog){};
void runUI();
private:
Catalog *catalog;
void showMenu();
int getOption();
void addStudent();
UIconsole.cpp
int inp;
do{
showMenu();
inp = getOption();
switch(inp){
case 0: break;
case 1: addStudent();break;
}while(inp != 0);
}
void UIconsole::addStudent(){
string name;
int id,gr;
cout<<"Name: ";
cin>>name;
cout<<"ID: ";
cin>>id; cout<<endl;
cout<<"Group: ";
cin>>gr; cout<<endl;
catalog->addNewStudent(name,id,gr);
// try {
// catalog->addNewStudent(n,id,gr);
// cout<<"Student has been added!"<<endl;
// } catch (Exception &ex) {
// cout<<"Student HASN'T been added"<<ex.getMsg()<<endl;
// }
}
catalog.cpp:
void Catalog::addNewStudent(string name, int id, int gr){
Student st(name, id,gr);
//StudentValidator.
studRepo.save(st);
}
studentRepo.cpp:
void StudentRepository::save(Student A){
string B;
int check;
B = A.getName();
// check = findByName(B);
//
// if(check != 0){
students.push_back(Student(A));
// }
// else{
// throw RepoException("Name already exist in the database!");
// }
}
studentRepo.h
class StudentRepository{
private:
vector <Student> students;
public:
vector <Student> getAll();
void save(Student);
void edit(Student);
void delByName(string);
void searchById();
int findByName(string name);
~StudentRepository();
};
跟踪:
Dr. Memory version 1.4.6 build 2 built on Mar 7 2012 10:14:04
Application cmdline: ""D:\c++\Begin\L_6-8\Debug\L_6-8.exe""
Recorded 62 suppression(s) from default C:\Program Files (x86)\Dr. Memory/bin/suppress-default.txt
Error #1: UNINITIALIZED READ: reading register eax
# 0 _fu36___ZSt4cout [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:90]
# 1 UIconsole::runUI() [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:19]
# 2 Application::run() [D:\c++\Begin\L_6-8\Debug/../App.cpp:43]
# 3 main [D:\c++\Begin\L_6-8\Debug/../App.cpp:27]
Note: @0:00:10.842 in thread 5436
Note: instruction: mov (%eax) -> %eax
Error #2: UNADDRESSABLE ACCESS: reading 0x00000004-0x00000008 4 byte(s)
# 0 std::vector<>::push_back() [c:/mingw/bin/../lib/gcc/mingw32/4.6.1/include/c++/bits/stl_vector.h:828]
# 1 StudentRepository::save() [D:\c++\Begin\L_6-8\Debug/../StudentRepository.cpp:27]
# 2 Catalog::addNewStudent() [D:\c++\Begin\L_6-8\Debug/../Catalog.cpp:7]
# 3 _fu36___ZSt4cout [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:90]
# 4 UIconsole::runUI() [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:19]
# 5 Application::run() [D:\c++\Begin\L_6-8\Debug/../App.cpp:43]
# 6 main [D:\c++\Begin\L_6-8\Debug/../App.cpp:27]
Note: @0:00:10.853 in thread 5436
Note: instruction: mov 0x04(%eax) -> %edx
Error #3: LEAK 21 direct bytes 0x006ff488-0x006ff49d + 0 indirect bytes
# 0 libstdc++-6.dll!Znwj
# 1 libstdc++-6.dll!ZNSs7reserveEj
# 2 libstdc++-6.dll!ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E
# 3 _fu2___ZSt3cin [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:81]
# 4 UIconsole::runUI() [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:19]
# 5 Application::run() [D:\c++\Begin\L_6-8\Debug/../App.cpp:43]
# 6 main [D:\c++\Begin\L_6-8\Debug/../App.cpp:27]
DUPLICATE ERROR COUNTS:
SUPPRESSIONS USED:
ERRORS FOUND:
1 unique, 1 total unaddressable access(es)
1 unique, 1 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total warning(s)
1 unique, 1 total, 21 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
ERRORS IGNORED:
84 still-reachable allocation(s)
(re-run with "-show_reachable" for details)
Details: C:\Users\Warzaru\AppData\Roaming/Dr. Memory/DrMemory-L_6-8.exe.8092.000/results.txt
答案 0 :(得分:4)
要注意的第一个问题是Application构造函数。 Application类使用指针作为其成员,但您没有为这些指针分配数据。您希望用以下代码替换Application构造函数的主体:
[member] = new [member_type];
这也可能解决你的崩溃问题。
答案 1 :(得分:2)
你混淆了内存模型。
您的原始版本有两个问题
``
Application::Application(){
StudentRepository stre();
StudentValidator stvl();
Catalog cat();
UIconsole ui();
}
如果要使用指针,请使用此方法
class Application{
private:
StudentRepository *stre;
StudentValidator *stvl;
Catalog *cat;
UIconsole *ui;
public:
Application();
~Application();
void run();
};
Application::Application(){
stre = new StudentRepository();
stvl = new StudentValidator ();
cat = new Catalog();
ui = new UIconsole ();
}
Application::~Application(){
delete stre;
delete stvl;
delete cat;
delete ui;
}
或只是将对象添加为成员。来自“ - &gt;”的内部访问切换到“。”
class Application{
private:
StudentRepository stre;
StudentValidator stvl;
Catalog cat;
UIconsole ui;
public:
// Application(); // no more necessary for this limited case
// ~Application(); // no more necessary for this limited case
void run();
};