0

GUI からこのクラスのインスタンスを作成していますon_click()fork()それは一連の他のプロセスに想定されています。最後まで問題なく実行され、その時点で GUI がエラーで閉じます。

free(): 無効なポインター: 0x000000000209c608

これは、プログラムが立ち入り禁止のメモリ ロケーションにアクセスしようとしていることを意味していると理解しています。QT クリエーターを使用していますが、デバッガーが正しく動作しないようです。コードは次のとおりです。

scriptfilefeed::scriptfilefeed() { }

scriptfilefeed::scriptfilefeed(vector<vector<vector<string> > > & newFeed, double trimParam1, unsigned int trimParam2)
{
    const string min = "<TMIN>";
    const string max = "<TMAX>";
    bla[0] = "6";
    bla[1] = "47";

    input.clear();

    for (int i = 0; i < newFeed.size(); i++)
    {
        if (i == 1)
        { // then we first need to run trimlowQ to get arguments

        }
        input.clear();

        for (int j = 0; j < newFeed[i].size(); j++)
        {
            for (int k = 0; k < newFeed[i][j].size(); k++)
            {
                curstr = newFeed[i][j][k];
                input.push_back(curstr.c_str());

                if (i == 1 && input.at(j) == min)
                { // const string comp.for trim parameters
                    input.pop_back(); // remove last element
                    input.push_back(bla[0]); // insert this instead
                }

                if (i == 1 && input.at(j) == max)
                {
                    input.pop_back(); // remove last element
                    input.push_back(bla[1]);
                }
                cout << newFeed[i][j][k] << endl;
            }

        }

        while (input.size() <= 13)
        {
            input.push_back(0);
        }

        cout << "Starting Process: " << input.at(1) << endl;
        child = fork();

        int ret;
        if (child == 0)
        {
            ret = execl(input.at(0), input.at(1), input.at(2), input.at(3), input.at(4), input.at(5), input.at(6), input.at(7), input.at(8), input.at(9), input.at(10), input.at(11), input.at(12));
            printf("failed... ret=%d\n", ret);
            perror("this error occured:");
        }

        bool childEnded = false;
        while (childEnded == false)
        {
            int status;
            int result = waitpid(child, &status, WNOHANG);
            if (result == 0)
            {
                // keep going
            }
            else if (result == -1)
            {
                // continue
            }
            else
            {
                childEnded = true;
                cout << "Process Finished" << endl;
            }
        }
    }
}
4

0 に答える 0