信号名称:SIGSEGV 错误

编程入门 行业动态 更新时间:2024-10-18 20:32:58
本文介绍了信号名称:SIGSEGV 错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在尝试构建此应用程序时不断收到此错误.帮忙?

I Keep getting this error when i try and build this app. Help?

The inferior stopped because it received a signal from the operating system. Signal name: SIGSEGV Signal meaning: Segmentation fault

这是 mainwindow.cpp 文件的代码它说错误在第 122 行,即

Here is the code for the mainwindow.cpp file It says the error is on line 122 which is the

copyAct->setEnabled(false);

copyAct->setEnabled(false);

这大约是一半.

#include "mainwindow.h" #include <QtGui> MainWindow::MainWindow(QWidget *parent) { textEdit = new QPlainTextEdit; setCentralWidget(textEdit); createActions(); createMenus(); createToolBars(); createStatusBar(); readSettings(); connect(textEdit->document(), SIGNAL(contentsChanged()),this, SLOT(documentWasModified())); setCurrentFile(""); setUnifiedTitleAndToolBarOnMac(true); } void MainWindow::closeEvent(QCloseEvent *event) { if(maybeSave()){ writeSettings(); event->accept(); } else{ event->ignore(); } } void MainWindow::newFile() { if(maybeSave()){ textEdit->clear(); setCurrentFile(""); } } void MainWindow::open() { if(maybeSave()){ QString fileName = QFileDialog::getOpenFileName(this); if(!fileName.isEmpty()) loadFile(fileName); } } bool MainWindow::save() { if(curFile.isEmpty()){ return saveAs(); } else{ return saveFile(curFile); } } bool MainWindow::saveAs() { QString fileName = QFileDialog::getSaveFileName(this); if(fileName.isEmpty()) return false; return saveFile(fileName); } void MainWindow::about() { QMessageBox::about(this, tr("About Application"), tr("Whatever you want it to say here!")); } void MainWindow::documentWasModified() { setWindowModified(textEdit->document()->isModified()); } void MainWindow::createActions() { newAct = new QAction(tr("&New"), this); newAct->setShortcuts(QKeySequence::New); newAct->setStatusTip(tr("Create a new file")); connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); openAct = new QAction(tr("&Open..."), this); openAct->setShortcuts(QKeySequence::Open); openAct->setStatusTip(tr("Open an existing file")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); saveAct = new QAction(tr("&Save"), this); saveAct->setShortcuts(QKeySequence::Save); saveAct->setStatusTip(tr("Save an open file")); connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); saveAsAct = new QAction(tr("&Save As"), this); saveAsAct->setShortcuts(QKeySequence::SaveAs); saveAsAct->setStatusTip(tr("Save a new file")); connect(openAct, SIGNAL(triggered()), this, SLOT(saveAs())); exitAct = new QAction(tr("&Exit"), this); exitAct->setShortcuts(QKeySequence::Close); exitAct->setStatusTip(tr("Exit the application")); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); cutAct = new QAction(tr("&Cut"), this); cutAct->setShortcuts(QKeySequence::Cut); cutAct->setStatusTip(tr("Cut the selected text")); pasteAct = new QAction(tr("&Paste"), this); pasteAct->setShortcuts(QKeySequence::Paste); pasteAct->setStatusTip(tr("Paste selected text")); connect(pasteAct, SIGNAL(triggered()), this, SLOT(setEnabled(bool))); aboutAct = new QAction(tr("&About"), this); aboutAct->setShortcuts(QKeySequence::UnknownKey); aboutAct->setStatusTip(tr("About the application")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(show())); cutAct->setEnabled(false); copyAct->setEnabled(false); connect(textEdit, SIGNAL(copyAvailable(bool)), cutAct, SLOT(setEnabled(bool))); connect(textEdit, SIGNAL(copyAvailable(bool)), copyAct, SLOT(setEnabled(bool))); } void MainWindow::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); fileMenu->addAction(saveAct); fileMenu->addAction(saveAsAct); fileMenu->addSeparator(); fileMenu->addAction(exitAct); editMenu = menuBar()->addMenu(tr("&Edit")); editMenu->addAction(cutAct); editMenu->addAction(copyAct); editMenu->addAction(pasteAct); menuBar()->addSeparator(); helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(aboutAct); } void MainWindow::createToolBars() { fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); fileToolBar->addAction(saveAct); editToolBar = addToolBar(tr("Edit")); editToolBar->addAction(cutAct); editToolBar->addAction(copyAct); editToolBar->addAction(pasteAct); } void MainWindow::createStatusBar() { statusBar()->showMessage(tr("Ready")); } void MainWindow::readSettings() { QSettings settings("Zach Starnes", "Zach's Text Editor"); QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); QSize size = settings.value("size", QSize(400, 400)).toSize(); resize(size); move(pos); } void MainWindow::writeSettings() { QSettings settings("Zach Starnes", "Zach's Text Editor"); settings.setValue("pos", pos()); settings.setValue("size", size()); } bool MainWindow::maybeSave() { if (textEdit->document()->isModified()) { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("Application"), tr("The document has been modified. " "Do you want to save your changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); if (ret == QMessageBox::Save) return save(); else if (ret == QMessageBox::Cancel) return false; } return true; } void MainWindow::loadFile(const QString &fileName) { QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("Application"), tr("Cannot read file %1: %2.") .arg(fileName) .arg(file.errorString())); return; } QTextStream in(&file); #ifndef QT_NO_CURSOR QApplication::setOverrideCursor(Qt::WaitCursor); #endif textEdit->setPlainText(in.readAll()); #ifndef QT_NO_CURSOR QApplication::restoreOverrideCursor(); #endif setCurrentFile(fileName); statusBar()->showMessage(tr("File loaded"), 2000); } bool MainWindow::saveFile(const QString &fileName) { QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, tr("Application"), tr("Cannot write file %1: %2.") .arg(fileName) .arg(file.errorString())); return false; } QTextStream out(&file); #ifndef QT_NO_CURSOR QApplication::setOverrideCursor(Qt::WaitCursor); #endif out << textEdit->toPlainText(); #ifndef QT_NO_CURSOR QApplication::restoreOverrideCursor(); #endif setCurrentFile(fileName); statusBar()->showMessage(tr("File saved"), 2000); return true; } void MainWindow::setCurrentFile(const QString &fileName) { curFile = fileName; textEdit->document()->setModified(false); setWindowModified(false); QString shownName = curFile; if (curFile.isEmpty()) shownName = "untitled.txt"; setWindowFilePath(shownName); } QString MainWindow::strippedName(const QString &fullFileName) { return QFileInfo(fullFileName).fileName(); }

推荐答案

看起来对于您拥有的所有其他操作(我假设是成员数据指针),您已经为以下各项分配了一些内存:

Looks like for every other action you have (which I assume are member data pointers), you've allocated some memory for:

aboutAct = new QAction(tr("&About"), this);

copyAct 似乎是您尚未为其分配任何内容的唯一操作,因此您正在取消引用无效指针.

copyAct seems to be the only action you haven't allocated anything for, and therefore you are dereferencing an invalid pointer.

copyAct->setEnabled(false); // segfault :(

我假设你错过了这样的东西:

You are missing something like this, I assume:

copyAct = new QAction(tr("&Copy"), this);

我希望这也不是您的整个 cpp 文件,因为我没有看到析构函数或任何 delete 来匹配所有这些 new 命令.

I hope this isn't your entire cpp file either, as I don't see a destructor nor any delete's to match all those new commands.

更多推荐

信号名称:SIGSEGV 错误

本文发布于:2023-10-09 05:54:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1474890.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:信号   错误   名称   SIGSEGV

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!