-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 中遇到了段错误……知道为什么吗?

4

1 回答 1

2

我认为问题在于您的捕获。您正在对所有变量使用引用捕获。您应该按价值进行i捕获j。试试[&, i, j]你的捕获子句。

编辑:您可以在此处查看答案。你有同样的问题。

于 2014-01-23T22:31:11.703 回答