안녕하세요 std :: vector <>의 생성자가 out_of_range 예외를 throw하는 이상한 문제가 있습니다. 예외는 다음과 같습니다 :C++ 벡터 생성자가 std :: out_of_range 예외 (Microsoft C++ stdlib)를 throw합니다.
First-chance exception at 0x000007fefde09e5d in 3dsmax.exe: Microsoft C++ exception: std::out_of_range at memory location 0x6726ee40..
어쨌든별로 도움이되지 않습니다. 디버거에서 코드는 다음과 같이 표시됩니다.
std::vector<Point3> points;
std::vector<Point3> normals;
예외는 두 번째 줄에서 발생합니다. 이것들은 두 개의 지역 변수로 멤버 함수 본문에 있고 여러 번 호출되었음을 의미합니다. 이 두 생성자가 처음 호출되었을 때 예외가 발생하지 않지만 두 번째 줄 (법선)이 두 번째로 누적 된 경우 항상 throw됩니다. 당신은 3ds 맥스의 SDK의 Point3.h에서이 클래스를 찾을 수 있습니다
class GEOMEXPORT Point3: public MaxHeapOperators {
public:
float x,y,z;
// Constructors
/*! \remarks Constructor. No initialization is performed. */
Point3() { /* NO INIT */ }
/*! \remarks Constructor. x, y, and z are initialized to the values specified. */
Point3(float X, float Y, float Z) {
x = X; y = Y; z = Z;
}
/*! \remarks Constructor. x, y, and z are initialized to the specified values (cast as floats). */
Point3(double X, double Y, double Z) {
x = (float)X; y = (float)Y; z = (float)Z;
}
/*! \remarks Constructor. x, y, and z are initialized to the specified values (cast as floats). */
Point3(int X, int Y, int Z) {
x = (float)X; y = (float)Y; z = (float)Z;
}
/*! \remarks Constructor. x, y, and z are initialized to the specified Point3. */
Point3(const Point3& a) {
x = a.x; y = a.y; z = a.z;
}
:은 "POINT3"클래스처럼 보인다 3DSMAX SDK에 정의되어 있습니다. 그 안에 3 개의 부동 소수점 만 있고 다양한 유형의 생성자가있는 것 같습니다. 나는이 수업에서 문제가 있다는 것을 믿을 수 없다.
Windows 7이 설치된 VisualStudio 2008을 사용하고 있습니다.이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 감사.
업데이트 : 예, 첫 번째 예외입니다.하지만 STL에서 처리되지 않고 직접 응용 프로그램이 다운 될 수 있습니다. (그리고 try-catch를 사용하여 해당 범위를 왜곡하면이 예외를 catch 할 수 있습니다.)
업데이트 : 두 개의 로컬 변수를 스택에서 힙 (새 값 사용)으로 이동하려고 시도했지만 문제가 지속됩니다.
첫 번째 예외 일 뿐이므로 무시하십시오. –
이 예외는 STL에서 발견되지 않고 팝업되어 응용 프로그램이 다운되었습니다. – Lycoress
디버거에서 실행하면 throws가 중단되어 슬프지만 너무 많은 현지화 된 요청을 처리 할 수 없습니다. –