그럼 비트 연산에 대해 배우기 때문에이 오류의 원인을 알 수 없습니다. 내가 봤 거든이 오류가 스택을 망친하거나, 어떤 경우에는 CPU 아키텍처와 관련이있을 때 발생할 수있는 것으로 보인다. 도움이 될 다른 플래그로 컴파일을 시도했지만 작동시키지 못합니다.(C++) 비트 OR 연산시 "잘못된 명령어 (코어 덤프 됨)"오류가 발생합니다.
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
이 출력의 결과를 알려 드리겠습니다. oop (결코 첫 번째 루프를 지나치지 않게). 여기 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]
내가 크게 사람이 왜 이런 일에 대해 말해 줄 수있는 통찰력을 고맙게 생각하고, 명확한 이유가있는 경우 , 문제를 해결하는 방법.
감사합니다.
플랫폼 (컴파일러 versikon, OS, IDE)이 무엇입니까? [MCVE]를 제공 할 수 있습니까? –
런타임에 비트 OR 연산에 문제가있는 것은 드문 경우입니다. 문제를 [mcve]로 줄이고 게시하십시오. –
'Density_Func' (vec3 (cornerPos)) 호출을 somme 더미 상수로 대체하여'Density_Func'가 호출되지 않은 경우에도 여전히 크라 샤가 발생하는지 확인하십시오. –