[완료] 동적할당 부분에서 멈추는데...왜 이런지 모르겟습니다.
글쓴이: eldrids / 작성시간: 화, 2012/04/03 - 10:50오전
using namespace techsoft; typedef techsoft::matrix<double> dMatrix;
template <class T> class matrix { public: typedef T value_type; typedef valarray<T> array_type; // Constructors matrix (); matrix (size_t nRow, size_t nCol); matrix (size_t nRow, size_t nCol, const T& e); matrix (size_t nRow, size_t nCol, const T* Array, MatArrayType aType = C_ARRAY); matrix (size_t nRow, size_t nCol, const valarray<T>& vec); ~matrix (); }
struct base_mat { valarray<T> val; size_t nrow, ncol; int refcnt; base_mat (size_t row, size_t col) : nrow( row), ncol( col), val( row * col) { refcnt = 1; } base_mat (const T& v, size_t row, size_t col) : nrow( row), ncol( col), val( v, row * col) { refcnt = 1; } base_mat (const T* v, size_t row, size_t col) : nrow( row), ncol( col), val( v, row * col) { refcnt = 1; } base_mat (size_t row, size_t col, const valarray<T>& v) : nrow( row), ncol( col), val( v) { refcnt = 1; } ~base_mat () {;} }
template <class T> inline matrix<T>::matrix (size_t nRow, size_t nCol) { mPtr = allocator( Allocate, nRow, nCol); } template <class T> matrix<T>::matrix (size_t nRow, size_t nCol, const T& e) { mPtr = new base_mat( e, nRow, nCol); allocator( Record); } template <class T> matrix<T>::matrix (size_t row, size_t col, const T* val, MatArrayType aType) { if (aType == C_ARRAY) { mPtr = new base_mat( val, row, col); <= 이부분에서 멈춥니다.( base_mat 함수는 위에 있습니다) allocator( Record); } else { mPtr = allocator( Allocate, row, col); T *pv = &mPtr->val[0]; for (size_t k=0, j=0; j < col; j++) for (size_t i=0; i < row; i++) pv[i*col+j] = val[k++]; } } template <class T> matrix<T>::matrix (size_t nRow, size_t nCol, const valarray<T>& vec) { mPtr = new base_mat( nRow, nCol, vec); allocator( Record); }
double _b[4][3] = { { x.s_, -x.v_[2], x.v_[1] }, { x.v_[2], x.s_, -x.v_[0] }, {-x.v_[1], x.v_[0], x.s_ }, {-x.v_[0], -x.v_[1], -x.v_[2] }}; dMatrix B(4,3,&_b[0][0]); <=이부분에서 멈춥니다.(하위 소스는 위에 있습니다.) B = B*0.5*dt; const double _q[3][3] = { {1, 0, 0 }, {0, 1, 0 }, {0, 0, 1}, }; // Covariance matrix of porcess noises const dMatrix Q(3, 3, &_q[0][0]); // Predicted state estimate x = x * Quaternion (w[0]*dt, w[1]*dt, w[2]*dt);
벌써 일주일 넘게 해결을 못하고 있습니다.
visual Studio에서 잘 돌아가는 소스였는데 말이죠..
IAR 컴파일러로 옴겨서 컴파일해보니 컴파일은 잘되었습니다.
근데 matrix::matrix (size_t nRow, size_t nCol, const valarray& vec) 함수에서
mPtr = new base_mat( val, row, col); <= 이부분에서 멈춥니다.( base_mat 함수는 위에 있습니다)
동적할당부분에서 멈추네요...
Forums:
array 접근 문제가 아닌지..
우선 생성자 중에 const dMatrix Q(3, 3, &_q[0][0]); 이면,
matrix (size_t nRow, size_t nCol, const T* Array, MatArrayType aType = C_ARRAY); 이 호출될 것 같은데,
이쪽 부분 소스를 올리면 답변 받기가 쉬울것 같습니다.
정황상 2-d array 접근 관련으로 보이는데, 다음과 같이 바꾸면 문제가 없어지는지요?
파라메타 숫자가 틀린데요...
matrix (size_t nRow, size_t nCol, const T* Array, MatArrayType aType = C_ARRAY);
는 파라메타가 4갭니다만...
3개쓰는데 이걸 쓸리는 없다고 생각합니다.
matrix (size_t nRow, size_t nCol, const T& e); 가 맞다고 생각합니다.
그리고 밑에 있는 건 문법상 틀리네요.
제 착각이네요..
전부 프린트문으로 디버그하니깐..
matrix (size_t nRow, size_t nCol, const T* Array, MatArrayType aType = C_ARRAY);
이 함수로 빠지네요..
힙문제였네요..
쓰는 MPU 의 힙 할당이 적어서 그런거같네요..
컴파일러에서 힙 할당을 늘려주니 잘 넘어가는군요..
댓글 달기