これが私のスクリプトです:
void FileOperations::SetInputFile(QString x){
InputFilename=x.toStdString();
}
void FileOperations::SetOutputFile(QString x){
OutputFilename=x.toStdString();
}
最初のもの(SetInputFile)は、InputFilenameをxに設定しようとするとクラッシュします。2つ目は正常に動作します。
これらの2つの文字列を変更するクラスは次のとおりです。
class FileOperations
{
public:
void SetInputFile(QString x);
void SetOutputFile(QString x);
private:
string InputFilename;
string OutputFilename;
};
ご覧のとおり、「InputFilename」と「OutputFilename」は同一であり、それらの関数もほぼ同一です。文字列を別の名前に変更しようとしましたが、それでもクラッシュします。
クラッシュした後、デバッグを押して、Microsoft VisualStudio2010のエラーを表示できます。クラッシュ情報は次のとおりです。
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() Qt5Widgetsd.dll
!6665de30()
665f15a0()
Qt5Widgetsd.dll!665e0253()
msvcr100d.dll!_free_dbg(void * pUserData、int nBlockUse)1267行目+0xcバイトC++ 0246b188()
コードで最初に表示されるのは次のとおりです。
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
QTCreatorでQT5を使用しています。
[編集]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());
}