【发布时间】:2017-06-07 09:47:33
【问题描述】:
长话短说:我遇到了一些引发我无法理解的错误的代码(请见谅,我是 C++ 新手)。
我的代码(简化)执行以下操作:
vector<vector<double>> AmplCo;
AmplCo.resize(1025, vector<double>(65, 0));
Concurrency::parallel_for((long)0, (long)65, [&](long i) {
for (j = 0; j <= 64; j++)
{
PhiRad = double(j) / 128 * PI;
CosPhi = cos(PhiRad); SinPhi = sin(PhiRad);
RealCoij = static_cast<double>(RealCo[j * 1025 + i]);
A = RealCoij * CosPhi;
B = RealCoij * SinPhi;
AmplCo.at(i).at(j) =log10(A * A + B * B);
}
}); // <- A breakpoint here is reached
RealCo = nullptr; // <- A breakpoint here is never reached
RealCo 当然是一个指针。
执行没有到达RealCo = nullptr;,因为在 lambda 函数的末尾和该行之间,我得到了一个未处理的异常。
知道我做错了什么吗?
编辑:再一次,如果你想投反对票,至少要有礼貌地解释原因。
【问题讨论】:
-
不相关也不确定,但我认为您可以使用
0L来代替(long) 0 -
索引
RealCo[j * 1025 + i]看起来可能超出范围 -
RealCo 在我的示例中是从 c++ 外部传递的
0 to 1024 x 0 to 64二维数组。我不确定它是否会越界,因为它不会在那一行引发错误 -
抛出哪一行,异常是什么?
-
lambda 函数结束。现在编辑答案以强调这一点
标签: c++ multithreading for-loop vector concurrency