【发布时间】:2015-10-19 09:48:42
【问题描述】:
我的代码因段错误而崩溃,我无法确定错误出在哪里。在将指针作为参数等传递时,我仍在学习指针的方式。这是对此应该很重要的代码。当我运行issueBook() 函数时发生段错误。
IssuedBooks.h
#ifndef ISSUEDBOOKS_H
#define ISSUEDBOOKS_H
#include "ClientList.h"
#include "BookList.h"
#include <QMultiMap>
class IssuedBooks {
public:
IssuedBooks() {}
~IssuedBooks();
void issueBook(Client*, Book*);
void returnBook(Client*, Book*);
ClientList getClients() const;
BookList getClientBooks(Client*) const;
private:
QMultiMap<Client*, Book*> issuedBooks;
};
#endif
IssuedBooks.cpp
#include "IssuedBooks.h"
#include <qDebug>
IssuedBooks::~IssuedBooks(){
qDeleteAll(issuedBooks);
issuedBooks.clear();
}
void IssuedBooks::issueBook(Client* c, Book* b){
if(!issuedBooks.contains(c, b)){
issuedBooks.insert(c, b);
}
}
void IssuedBooks::returnBook(Client* c, Book* b){
if(issuedBooks.contains(c, b)){
issuedBooks.remove(c, b);
}
}
ClientList IssuedBooks::getClients() const{
QMapIterator<Client*, Book*> itr(issuedBooks);
ClientList clients;
while(itr.hasNext()){
itr.next();
clients.addClient(itr.key());
}
return clients;
}
BookList IssuedBooks::getClientBooks(Client* c) const{
QMapIterator<Client*, Book*> itr(issuedBooks);
BookList books;
while(itr.hasNext()){
itr.next();
if(itr.key() == c){
books.addBook(itr.value());
}
}
return books;
}
LibraryDriver.cpp
#include "ClientList.h"
#include "BookList.h"
#include "IssuedBooks.h"
#include <QtGui>
#include <QtWidgets>
QTextStream cout(stdout);
int main(int argc, char* argv[]){
QApplication app(argc, argv);
BookList bookList;
ClientList clientList;
IssuedBooks issueList;
Book* b = new Book("Nick Corin", "An awesome life.", 59.99);
bookList.addBook(b);
Client* c = new Client("Nick Corin", QDate::currentDate());
clientList.addClient(c);
issueList.issueBook(c, b);
}
【问题讨论】:
-
你试过 GDB 来找出它为什么会崩溃吗?
-
您的
issueBook看起来没问题,所以错误在其他地方。 -
有人评论询问 app.exec() 但现在我找不到评论?出于某种原因,事实确实如此?我将 app.exe() 添加到我的主要功能的末尾,我所有的问题都消失了吗?知道为什么吗?
-
好收获!在实际使用
QApplication做任何事情之前,它必须是executed;否则,将不会有任何 Qt 主循环并且没有正确设置 Qt 环境,您所做的一些事情可能会尝试访问;访问不存在的东西会导致段错误。 -
我从没想过它会产生如此大的不同,因为没有它,程序运行得很好,直到我尝试发行书籍并遇到段错误。十分有趣!我想知道谁评论然后删除它。不管你是谁,你都解决了问题!
标签: c++ qt segmentation-fault