0

これが私のスクリプトです:

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());
}
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 に答える