首页 > 解决方案 > 如果我写“cout”,SIGTRAP 不会出现

问题描述

我正在编写一个 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,跟踪/断点陷阱”。奇怪的是,如果我允许“cout”行代码(我写它是为了找出代码失败的时间),那么就没有错误并且代码按预期工作。知道发生了什么吗?如果您需要详细的功能

标签: c++compiler-errors

解决方案


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

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


推荐阅读