-1
static T MultiplyElement(const Matrix& matrixA, const Matrix& matrixB, 
    unsigned M2col, unsigned M1row)
{
    T sumToReturn = 0;

    for (unsigned iM1colM2row = 0; iM1colM2row < matrixA.m_n; iM1colM2row++)
    {
        sumToReturn += 
            matrixA.m_data[M1row][iM1colM2row] * matrixB.m_data[iM1colM2row][M2col];
    }

    return sumToReturn;
}

...

    std::vector<std::thread> threads;
    for(unsigned i = 0; i < outM ; ++i)
    {
        for(unsigned j = 0; j < outN; ++j)
        {
            threads.push_back(std::thread([&]()
            {
                outMatrix.m_data[i][j] = MultiplyElement(matrixA, matrixB, i, j);
            }
            ));
        }
    }
    for(auto& thread : threads)
    {
        thread.join();
    }

コンパイル済み: clang++ -std=c++11 -stdlib=libc++ newFile.cpp

MultiplyElement で segfault が発生しています...理由は何ですか?

4

1 に答える 1

2

問題はあなたのキャプチャにあると思います。すべての変数に参照キャプチャを使用しています。値によってキャプチャする必要がiありjます。[&, i, j]キャプチャ句を試してください。

編集:ここで答えを確認できます。同じ問題があります。

于 2014-01-23T22:31:11.703 に答える