C++;多线程运行时错误:已调用abort() 我编写了一个C++程序,从时间n=168到0,根据值w(t+1)计算向后w(t)。W(t)是具有负指数的三维修正向量。我选择运行k-multi-thread来填充Wt[k][I][j]中的值。单线程版本工作正常,但在多线程上运行时失败,出现报告_runtime_错误:“abort()已被调用。”(来自主线程)。我试图检查线程窗口,但没有找到多少线索。有人能帮助/指导我如何调试吗

C++;多线程运行时错误:已调用abort() 我编写了一个C++程序,从时间n=168到0,根据值w(t+1)计算向后w(t)。W(t)是具有负指数的三维修正向量。我选择运行k-multi-thread来填充Wt[k][I][j]中的值。单线程版本工作正常,但在多线程上运行时失败,出现报告_runtime_错误:“abort()已被调用。”(来自主线程)。我试图检查线程窗口,但没有找到多少线索。有人能帮助/指导我如何调试吗,c++,multithreading,vector,C++,Multithreading,Vector,(i) 如何告诉我哪个工作线程在哪个步骤导致错误 (ii)我应该在调试模式中设置一些断点吗 // class ForwardShootingGrid was created as a modified 3D vector to cater negative index ForwardShootingGrid Wt; ForwardShootingGrid Wtp1; // as a worker thread void ComputeGridValue_LayerK(int n, int

(i) 如何告诉我哪个工作线程在哪个步骤导致错误

(ii)我应该在调试模式中设置一些断点吗

// class ForwardShootingGrid was created as a modified 3D vector to cater negative index 
ForwardShootingGrid Wt;
ForwardShootingGrid Wtp1;

// as a worker thread 
void ComputeGridValue_LayerK(int n, int i_max, int j_max, int k) {
    ......
    for (int i = -i_max; i <= i_max; i++) {
        for (int j = -j_max; j <= j_max; j++) {
            ......
            x = ......    // x depends on value from ForwardShootingGrid Wtp1
            Wt.AssignGridValue(k, i, j, x);    // to input value=x into Wt[k][i][j]
            ......
        }
    }
}

// as a Main thread
int main(int, char*[]) {
    for (int n = n_max - 1; n >= 0; n--) {    // n is somehow like the time index
        i_max = n;
        j_max = n;
        k_max = ...

        // Everytime copy ForwardShootingGrid Wt to Wtp1, and then recompute Wt which is based on value from Wtp1  
        Wtp1 = Wt;
        // resize Wt
        Wt.ResizeGrid(0, k_max, -i_max, i_max, -j_max, j_max);

        for (int k = 0; k <= k_max; k++) {
            oThreads[k] = std::thread(ComputeGridValue_LayerK, n, i_max, j_max, k);
        }
        for (int k = 0; k <= k_max; k++) {
            oThreads[k].join();
        }
}
//类ForwardShootingGrid被创建为一个修改的3D向量,以满足负索引的需要
转发网格Wt;
转发网格Wtp1;
//作为工作线程
void ComputeGridValue_LayerK(int n,int i_max,int j_max,int k){
......

对于(int i=-i_max;我只在有关工具本身的问题上使用Visual Studio标记(不适用于一般编程问题)。是否
AssignGridValue
线程安全?是否
oThreads
至少
k+1
元素大?调用
abort
时调用堆栈是什么?@Cameron:谢谢你的回答。(i)但是我尝试在simular编码中使用vector,它工作得很好(当多个线程更新同一个vector时)。(ii)调用堆栈似乎暗示主线程正在调用Abort()错误。(iii)我如何判断哪个工作线程导致了断点?我应该在调试模式中设置一些断点吗?