这是我的脚本:
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());
}