0

这是我的脚本:

void FileOperations::SetInputFile(QString x){
    InputFilename=x.toStdString();
}
void FileOperations::SetOutputFile(QString x){
    OutputFilename=x.toStdString();
}

第一个 (SetInputFile) 在尝试将 InputFilename 设置为 x 时崩溃。第二个工作正常。

这是我要更改这两个字符串的类:

class FileOperations
{
public:
    void SetInputFile(QString x);
    void SetOutputFile(QString x);
private:
    string InputFilename;
    string OutputFilename;
};

如您所见,“InputFilename”和“OutputFilename”是相同的,它们的功能也几乎相同。我尝试将字符串更改为不同的名称,但它仍然崩溃。

崩溃后,我可以按调试,并在 Microsoft Visual Studio 2010 中查看错误,这是崩溃信息:

msvcr100d.dll!operator delete(void * pUserData) 第 52 行 + 0x3 字节 C++ ShitLEncoder.exe!std::allocator::deallocate(char * _Ptr, unsigned int __formal) 第 182 行 + 0x9 字节 C++ ShitLEncoder.exe!std:: basic_string,std::allocator >::_Tidy(bool _Built, unsigned int _Newsize) Line 1998 C++ ShitLEncoder.exe!std::basic_string,std::allocator >::assign(std::basic_string,std::allocator > && _Right) 第 722 行 C++ ShitLEncoder.exe!std::basic_string,std::allocator >::operator=(std::basic_string,std::allocator > && _Right) 第 710 行 C++ ShitLEncoder.exe!FileOperations::SetInputFile(QString x) 第 8 行 + 0x26 字节 C++ ShitLEncoder.exe!MainWindow::on_OpenButton_clicked() 第 20 行 C++ ShitLEncoder.exe!MainWindow::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id,void * * _a) 第 72 行 + 0x8 字节 C++ ShitLEncoder.exe!MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) 第 106 行 + 0x15 字节 C++ Qt5Cored.dll!615820e0()
[下面的帧可能不正确和/或丢失,没有为 Qt5Cored.dll 加载符号]
Qt5Cored.dll!615c613f()
Qt5Cored.dll!615c5ac1()
Qt5Widgetsd.dll!66a7118b()
Qt5Widgetsd.dll!66727087()
Qt5Widgetsd.dll !6672703b()
Qt5Widgetsd.dll!66728092()
Qt5Widgetsd.dll!66629ef5()
Qt5Widgetsd.dll!66624c40()
Qt5Widgetsd.dll!665e0887()
Qt5Widgetsd.dll!66625405()
Qt5Widgetsd.dll!6665de30()
Qt! 665f15a0()
Qt5Widgetsd.dll!665e0253()
msvcr100d.dll!_free_dbg(void * pUserData, int nBlockUse) 第 1267 行 + 0xc 字节 C++ 0246b188()

它在代码中显示的第一件事是:

_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

我将 QT 5 与 QT Creator 一起使用。

[编辑] 这是 QT 主窗口类用来调用这些函数的代码:

void MainWindow::on_OpenButton_clicked()
{
    ui->OpenText->setText(QFileDialog::getOpenFileName(this, tr("Open File"),"",tr("Any                               file")));
    FileController->SetInputFile(ui->OpenText->text());
}

void MainWindow::on_SaveButton_clicked()
{
    ui->SaveText->setText(QFileDialog::getSaveFileName(this, tr("Save File"),"",tr("Any     file")));
    FileController->SetOutputFile(ui->SaveText->text());
}
4

1 回答 1

0

好的,我修复了它,我不确定它是如何工作的,我改变了这个:

class FileOperations
{
public:
    void SetInputFile(QString x);
    void SetOutputFile(QString x);
private:
    string InputFilename;
    string OutputFilename;
};

对此:

class FileOperations
{
public:
    void SetInputFile(QString x);
    void SetOutputFile(QString x);
private:
    string UnusedVariable;
    string InputFilename;
    string OutputFilename;
};

我添加了一个额外的未使用变量,它停止了崩溃:D

于 2013-01-24T07:35:16.633 回答