如果我写 "cout",SIGTRAP 不会显示

SIGTRAP does not show up if I write "cout"

我正在编写 Particle-In-Cell 代码来模拟等离子激光相互作用。代码的核心如下(在此之前已经正确初始化了所有变量):

for(int it = 0; it < Nt-1; it++)
{
        //cout << "it = " << it << endl;
        pos = pos_update(pos, vel, qm, E_P, it);
        
        vel = vel_update(pos, vel, it);
        
        rho_part = rho_part_update(rho_part, pos, qm, it);
        rho = rho_update(rho, rho_part, it);
        
        E_P = E_P_update(E_P, pos, rho, rho_part, it);
    }
}

如您所见,cout 已被评论。如果是这样,在执行程序时它最终会停止并且调试器会显示消息“程序接收到信号 SIGTRAP,Trace/breakpoint 陷阱”。奇怪的是,如果我允许那行“cout”代码(我写它是为了找出代码在什么时候失败),那么就没有错误并且代码按预期工作。知道发生了什么吗?如果您需要详细功能

SIGTRAP 表明您的 C++ 代码具有未定义的行为。但是 SIGTRAP 只是未定义行为可以表现出来的无限方式之一。添加另一个语句会导致未定义的行为以不同的方式出现并不奇怪。

至于您的评论,new[]delete 是通常应避免使用的原语。 std::vector 可能是更清洁的解决方案。但是如果你确实使用 then,那么 new[] 必须与 delete[] 配对,而不是 delete.