(C++)在按位 OR 操作时获取错误"Illegal instruction (core dumped)"
(C++) Getting error "Illegal instruction (core dumped)" upon bitwise OR operation
所以,我仍在学习有关位操作的知识,无法弄清楚为什么会发生此错误。我已经搜索过它,看来当堆叠堆栈时可能会发生此错误,或者在某些情况下与CPU架构有关。我尝试用本应提供帮助的不同标志编译,但我无法正常工作。
这是代码迅速:
int corners = 0;
for (int i = 0; i < 8; i++)
{
const ivec3 cornerPos = leaf->min + CHILD_MIN_OFFSETS[i];
const float density = Density_Func(vec3(cornerPos));
const int material = density < 0.f ? MATERIAL_SOLID : MATERIAL_AIR;
corners |= (material << i);
}
和错误"非法指令(核心倾倒)"正在线上发生
corners |= (material << i);
这是调试器的输出:
Signal received: SIGILL (Illegal instruction) For program, pid 26,118
我将给出此循环的输出(它永远不会超过第一个循环)。这是COUTS的代码:
int corners = 0;
std::cout<<"corners(outside loop): "<<corners<<std::endl;
for (int i = 0; i < 8; i++)
{
const ivec3 cornerPos = leaf->min + CHILD_MIN_OFFSETS[i];
std::cout<<"cornerPos.x: "<<cornerPos.x<<std::endl;
std::cout<<"cornerPos.y: "<<cornerPos.y<<std::endl;
std::cout<<"cornerPos.z: "<<cornerPos.z<<std::endl;
const float density = Density_Func(vec3(cornerPos));
std::cout<<"density: "<<density<<std::endl;
const int material = density < 0.f ? MATERIAL_SOLID : MATERIAL_AIR;
std::cout<<"material: "<<material<<std::endl;
std::cout<<"MATERIAL_SOLID: "<<MATERIAL_SOLID<<std::endl;
std::cout<<"MATERIAL_AIR: "<<MATERIAL_AIR<<std::endl;
std::cout<<"i: "<<i<<std::endl;
corners |= (material << i);
std::cout<<"corners(inside loop): "<<corners<<std::endl;
}
这是输出:
[corners(outside loop): 0] [cornerPos.x: -32] [cornerPos.y: -32] [cornerPos.z: -32] [density: -30] [material: 1] [MATERIAL_SOLID: 1] [MATERIAL_AIR: 0] [i: 0]
我将非常感谢有人可以给我关于为什么会发生这种情况的任何见解,如果有明确的原因,如何解决问题。
谢谢!
"非法指令"表示CPU试图执行不了解的指令。如果您使用CPU不支持的指令集编译程序,则可能会发生这种情况。在这个地方崩溃可能表明使用了BMI2位移位指令(在CPU上支持AVX2)。请检查您的汇编选项。
另一种可能性是您的程序已覆盖其一些代码。它位于与堆栈不同的内存区域,因此事情真的会弄乱。我怀疑这里不是这样。
这也可能是由于过热或一些CPU错误引起的,但是这些原因很可能也可以在这里排除。编译器中可能的错误。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)在按位 OR 操作时获取错误"Illegal instruction (core dumped)"
- 使用指针时遇到错误"The NTVDM CPU has encountered an illegal instruction"
- 在 Mac 10.9 上从 Android 源代码构建 aapt 小牛队在 10.8 山狮上出现段错误或给出"Illegal Instruction 4"
- Qt:带有Qt OSX Yosemite的CUDA "sed: illegal option -- r"错误
- 推力变换引发错误:"bulk_kernel_by_value: an illegal memory access was encountered"
- C++像素抓取器的RGB值错误
- TLS 变量上的"illegal thread-local reference to regular symbol"错误
- 简单的 CUDA 测试总是失败并出现错误"an illegal memory access was encountered"
- SMBIOS Enum取值.文档错误
- 由于试图取不在内存中的值而导致的分段错误
- 编译宙斯时'static functions with block scope are illegal'错误