C++ 如果我写“SIGTRAP”就不会出现;";
我正在编写一个细胞内粒子代码来模拟等离子体与激光的相互作用。代码的核心如下(在此之前,所有变量都已正确初始化):C++ 如果我写“SIGTRAP”就不会出现;";,c++,compiler-errors,C++,Compiler Errors,我正在编写一个细胞内粒子代码来模拟等离子体与激光的相互作用。代码的核心如下(在此之前,所有变量都已正确初始化): for(int it=0;it表明您的C++代码有未定义的行为。但是 SIGTRAP < /C>只是其中一种无限的行为,其中未定义的行为可以表现出来。添加另一条语句会导致不确定的行为以不同的方式显示,这并不奇怪。 至于你的评论,new[]和delete通常是应该避免的原语。std::vector可能是更干净的解决方案。但是如果你确实使用了then,那么new[]必须与delete[]
for(int it=0;it //cOut <代码> SIGTRAP < /Cord>表明您的C++代码有未定义的行为。但是<代码> SIGTRAP < /C>只是其中一种无限的行为,其中未定义的行为可以表现出来。添加另一条语句会导致不确定的行为以不同的方式显示,这并不奇怪。
至于你的评论,new[]
和delete
通常是应该避免的原语。std::vector
可能是更干净的解决方案。但是如果你确实使用了then,那么new[]
必须与delete[]
配对,而不是delete
在E\u update()中函数中有float*auxE=new float[Ncell]
和delete auxE
两行。如果我对delete auxE
进行注释,那么就不会再有SIGTRAP错误。但是,我仍然不明白核心代码中的是如何影响这一点的。如果你有new[]/delete/delete[]
不匹配,您应该能够诱使valgrind或编译器的消毒液或调试模式告诉您。非常感谢您的回复!顺便问一下,我需要使用delete[]在函数内部或退出函数时,分配的内存将自动删除?@AliEsquembreKucukalic:如果要在函数末尾自动删除,只需使用std::vector
。使用delete[]
当必须在编译器无法为您确定的将来某个复杂时间手动执行删除时。这在当今非常罕见。在vector
不起作用的罕见情况下,有备份选项std::unique_ptr
和std::shared_ptr
也可以避免de删除
。非常感谢!
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);
}
}