如果我写 "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
.
我正在编写 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
.