포인터 목록 C ++ opencv attrubuts가 예기치 않게 변경됨

Simoyw

opencv에서 객체를 추적 한 결과 포인트 목록을 저장하고 싶습니다.

이 목록을 활용합니다

list<list<OrganismPosition*>> trackList;

목록과 en 요소를 삽입합니다.

list<OrganismPosition*> sublist;
trackList.push_back(sublist);
list<list<OrganismPosition*>>::iterator itList=trackList.end();
itList--;
OrganismPosition* pos=new OrganismPosition();
//in this method I create a new point 
pos->setCenter(&box.center);//Here the point pos->center is (640,550)
itList->push_front(pos);//Error here the point pos->center has value (-103412,-102342)

오류는 목록에 개체를 추가 할 때 속성 "중심"의 값이 임의의 값으로 변경된다는 것입니다. 문제는 무엇이며 어떻게 해결합니까? 목록이 클래스의 복사 생성자를 호출한다는 것을 읽었으므로 속성의 올바른 값을 복사하기 위해 이것을 구현했지만 여전히 작동하지 않습니다. 도움을 주셔서 감사합니다. 감사

내 수업 OrganismPosition :

class OrganismPosition
{
    CvPoint2D32f* center;//center point of organisme tracked
    CvPoint2D32f* head;//head point of organisme tracked
    CvPoint2D32f* queue;//first point of organisme tracked
    CvPoint2D32f* skel1;//second point of organisme tracked
    CvPoint2D32f* skel2;//third point of organisme tracked
    CvPoint2D32f* skel3;//fourth point of organisme tracked
    CvPoint2D32f* skel4;//fiveth point of organisme tracked

public:
    OrganismPosition(void);
    ~OrganismPosition(void);
    OrganismPosition( const OrganismPosition& other );
    void setCenter(CvPoint2D32f* center);
    CvPoint2D32f* getCenter();
    void setHead(CvPoint2D32f* head);
    CvPoint2D32f* getHead();
    void setQueue(CvPoint2D32f* queue);
    CvPoint2D32f* getQueue();
    void setSkel(CvPoint2D32f* skel1,
                 CvPoint2D32f* skel2,
                 CvPoint2D32f* skel3,
                 CvPoint2D32f* skel4);
    void getSkel(CvPoint2D32f* skel1,
                 CvPoint2D32f* skel2,
                 CvPoint2D32f* skel3,
                 CvPoint2D32f* skel4);
};

Class OrganismPosition.cpp :

OrganismPosition::OrganismPosition(void)
{
}


OrganismPosition::~OrganismPosition(void)
{
}
OrganismPosition::OrganismPosition( const OrganismPosition& other )
  {
      OrganismPosition::center->x=other.center->x;
      OrganismPosition::center->y=other.center->y;
      OrganismPosition::head->x=other.head->x;
      OrganismPosition::head->y=other.head->y;


}


    void OrganismPosition::setCenter(CvPoint2D32f* center){
        CvPoint2D32f newcenter=cvPoint2D32f(center->x,center->y);
        this->center=&newcenter;
    }
    CvPoint2D32f* OrganismPosition::getCenter(){
        return this->center;
    }
    void OrganismPosition::setHead(CvPoint2D32f* head){
        CvPoint2D32f newhead=cvPoint2D32f(head->x,head->y);
        this->head=&newhead;
    }
    CvPoint2D32f* OrganismPosition::getHead(){
        return this->head;
    }
    void OrganismPosition::setQueue(CvPoint2D32f* queue){
        CvPoint2D32f newqueue=cvPoint2D32f(queue->x,queue->y);
        this->queue=&newqueue;
    }
    CvPoint2D32f* OrganismPosition::getQueue(){
        return this->queue;
    }
    void OrganismPosition::setSkel(CvPoint2D32f* skel1,
                 CvPoint2D32f* skel2,
                 CvPoint2D32f* skel3,
                 CvPoint2D32f* skel4){
        CvPoint2D32f newskel1=cvPoint2D32f(skel1->x,skel1->y);
        this->skel1=&newskel1;
        CvPoint2D32f newskel2=cvPoint2D32f(skel2->x,skel2->y);
        this->skel2=&newskel2;
        CvPoint2D32f newskel3=cvPoint2D32f(skel3->x,skel3->y);
        this->skel3=&newskel3;
        CvPoint2D32f newskel4=cvPoint2D32f(skel4->x,skel4->y);
        this->skel4=&newskel4;
    }
    void OrganismPosition::getSkel(CvPoint2D32f* skel1,
                CvPoint2D32f* skel2,
                CvPoint2D32f* skel3,
                CvPoint2D32f* skel4){
                skel1=this->skel1;
                skel2=this->skel2;
                skel3=this->skel3;
                skel4=this->skel4;
    }
라자

몇 가지 실수. 먼저 pos->center문제를 해결하겠습니다.

void OrganismPosition::setCenter(CvPoint2D32f* center){
    CvPoint2D32f newcenter=cvPoint2D32f(center->x,center->y);
    // you've created a local 2f object that resides on the stack. 
    //this will be destroyed when the function returns.
    this->center=&newcenter;
    // what you're left with is a stack pointer to garbage data.
}

원하는 것은 힙에 메모리를 할당하는 것입니다.

void OrganismPosition::setCenter(const CvPoint2D32f* center){
    if (center)
        delete center; // free memory that you used up before.
    this->center= new cvPoint2D32f(center->x,center->y);
}

자, 왜 처음부터이 모든 포인터 두통을 겪을까요? 수업 CvPoint2D32f에서 멤버를 사용 하십시오 OrganismPosition. 꼭 필요한 경우가 아니면 포인터를 만들지 마십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

함수에 전달 된 포인터가 예기치 않게 변경됨

분류에서Dev

목록을 스크롤 할 때보기가 예기치 않게 변경됨

분류에서Dev

C 함수 변수가 예기치 않게 변경됨

분류에서Dev

scenePhase가 예기치 않게 변경됨

분류에서Dev

스레드 호출 스택의 변수가 예기치 않게 변경됨 c

분류에서Dev

C 포인터 값-LHS 값의 예기치 않은 변경

분류에서Dev

함수에 전달 될 때 포인터 값이 예기치 않게 변경됨

분류에서Dev

c 구조 멤버가 주문이 변경 될 때 예기치 않게 변경됨

분류에서Dev

변수가 예기치 않게 변경됨

분류에서Dev

변수가 예기치 않게 변경됨

분류에서Dev

iOS의 글꼴 크기가 예기치 않게 변경됨

분류에서Dev

Windows 키보드 언어가 예기치 않게 변경됨

분류에서Dev

고정 div 너비가 예기치 않게 100 %로 변경됨

분류에서Dev

Pandas DataFrame 데이터 유형이 예기치 않게 변경됨

분류에서Dev

While 루프가 예기치 않게 종료 됨 (C / C ++)

분류에서Dev

스크롤 후 iOS, UITableView, 들여 쓰기가 예기치 않게 변경됨

분류에서Dev

C ++ While 루프가 예기치 않게 종료 됨

분류에서Dev

Internet Explorer 10 메뉴 항목에 예기치 않게 포커스 개요가 표시됨

분류에서Dev

Windows 7-64 컴퓨터가 예기치 않게 종료 됨

분류에서Dev

Mysql_fetch_data가 예기치 않게 인쇄 됨

분류에서Dev

예기치 않은 목록 추가

분류에서Dev

목록 중첩 경로 Rails "예기치 않은 tIVAR"의 색인을 가져 오는 중 오류 발생

분류에서Dev

글꼴 크기가 화면 크기에 따라 예기치 않게 크기가 변경됨

분류에서Dev

SQLITE가 예기치 않게 중지됨

분류에서Dev

Chromedriver가 예기치 않게 종료 됨

분류에서Dev

XQuartz가 예기치 않게 종료 됨

분류에서Dev

AWS 경보가 예기치 않게 Ok 상태가 됨

분류에서Dev

pthread_create의 인수로 대기열에 대한 포인터를 어떻게 전달합니까 (호환되지 않는 변환 경고가 표시됨)?

분류에서Dev

C # DynamicData / ReactiveUI-캐시에 항목을 추가 할 때 예기치 않은 명확한 변경

Related 관련 기사

  1. 1

    함수에 전달 된 포인터가 예기치 않게 변경됨

  2. 2

    목록을 스크롤 할 때보기가 예기치 않게 변경됨

  3. 3

    C 함수 변수가 예기치 않게 변경됨

  4. 4

    scenePhase가 예기치 않게 변경됨

  5. 5

    스레드 호출 스택의 변수가 예기치 않게 변경됨 c

  6. 6

    C 포인터 값-LHS 값의 예기치 않은 변경

  7. 7

    함수에 전달 될 때 포인터 값이 예기치 않게 변경됨

  8. 8

    c 구조 멤버가 주문이 변경 될 때 예기치 않게 변경됨

  9. 9

    변수가 예기치 않게 변경됨

  10. 10

    변수가 예기치 않게 변경됨

  11. 11

    iOS의 글꼴 크기가 예기치 않게 변경됨

  12. 12

    Windows 키보드 언어가 예기치 않게 변경됨

  13. 13

    고정 div 너비가 예기치 않게 100 %로 변경됨

  14. 14

    Pandas DataFrame 데이터 유형이 예기치 않게 변경됨

  15. 15

    While 루프가 예기치 않게 종료 됨 (C / C ++)

  16. 16

    스크롤 후 iOS, UITableView, 들여 쓰기가 예기치 않게 변경됨

  17. 17

    C ++ While 루프가 예기치 않게 종료 됨

  18. 18

    Internet Explorer 10 메뉴 항목에 예기치 않게 포커스 개요가 표시됨

  19. 19

    Windows 7-64 컴퓨터가 예기치 않게 종료 됨

  20. 20

    Mysql_fetch_data가 예기치 않게 인쇄 됨

  21. 21

    예기치 않은 목록 추가

  22. 22

    목록 중첩 경로 Rails "예기치 않은 tIVAR"의 색인을 가져 오는 중 오류 발생

  23. 23

    글꼴 크기가 화면 크기에 따라 예기치 않게 크기가 변경됨

  24. 24

    SQLITE가 예기치 않게 중지됨

  25. 25

    Chromedriver가 예기치 않게 종료 됨

  26. 26

    XQuartz가 예기치 않게 종료 됨

  27. 27

    AWS 경보가 예기치 않게 Ok 상태가 됨

  28. 28

    pthread_create의 인수로 대기열에 대한 포인터를 어떻게 전달합니까 (호환되지 않는 변환 경고가 표시됨)?

  29. 29

    C # DynamicData / ReactiveUI-캐시에 항목을 추가 할 때 예기치 않은 명확한 변경

뜨겁다태그

보관