C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[54509] AccessViolation Error 조언 부탁드립니다
우오아항 [corea139] 1087 읽음    2008-09-08 10:13
리스트뷰의 캡션에 순위를 매겨놨고(1, 2, 3 ... 식으로)
캡션을 수정하면, 예를 들어 원래 5 이었던 놈을 2로 바꾸는... , 바뀐 캡션 번호의 자리로 위치 이동이 되는 코드를 만들고 있습니다.
제 방식은 이동할 자리에 새로운 아이템을 Insert 하고 Insert 된 아이템에 기존 아이템의 데이타를 다 복사합니다.
그 후에 기존 아이템을 삭제합니다.
새로운 아이템을 Insert 하고 복사하는 코드는 OnEditd 이벤트 함수 내에 만들었고
삭제하는 코드는 OnChange 이벤트 함수 내에 있습니다.
그런데 삭제 후에 함수를 빠져나가는 순간에 AccessViolation Error 가 발생하는데 왜 에러가 나는지 도무지 모르겠네요.
원래는 삭제하는 함수를 OnEditd 함수 끝단에 위치시켰었는데 AccessViolation Error 가 발생해서 OnChange 함수로 옮겨본겁니다. 결과는 같구요...
flag 를 두어서 OnChange 함수를 들어가도 OnEdited 함수를 거쳐야지만 아이템이 삭제되도록 했구요.
함수를 빠져나가는 순간에 삭제되는 아이템에 접근하는거 같은데 왜 접근하는지도 모르겠네요.

아시는 분 제발 답변 부탁드려요~ ^---^

코드도 첨부합니다~

void __fastcall TCxBosuPriorF::ListView2Edited(TObject *Sender,
      TListItem *Item, AnsiString &S)
{
    TListItem* pItem;
    int nRecsCnt;


//요기서부터~
    //m_strBeforePrior과 S는 1부터 시작
    //m_strBeforePrior는 수정되기 전 캡션의 내용입니다.
    nRecsCnt = StrToInt(m_strBeforePrior)-1;
    ListView2->Items->BeginUpdate();
    for(int i = StrToInt(S)-1 ; i < nRecsCnt; i++)
    {
        pItem = ListView2->Items->Item[i];
        pItem->Caption = IntToStr(StrToInt(pItem->Caption) + 1);
    }
    ListView2->Items->EndUpdate();
//요기까지는 아이템이 중간에 삽입되기 때문에 삽입되는 다음 아이템들의 캡션을 하나씩 증가시켜주는 부분입니다.

    //삽입하고
    ListView2->Items->Insert(StrToInt(S)-1);

    //pItem은 삽입된 아이템
    pItem = ListView2->Items->Item[StrToInt(S)-1];
    pItem->Caption = S;
    nRecsCnt = Item->SubItems->Count;
    for(int i = 0 ; i < nRecsCnt-1; i++)
        pItem->SubItems->Add(Item->SubItems->Strings[i]);//내용 다 복사하기
   
    //OnChange 함수에서 삭제 조건으로 사용될 flag 변수
    m_bEdited = true;
}
//---------------------------------------------------------------------------

void __fastcall TCxBosuPriorF::ListView2Change(TObject *Sender,
      TListItem *Item, TItemChange Change)
{
      TListItem* pItem;

     if(m_bEdited)
    {
        m_bEdited = false;

       //삽입되는 아이템에 포커스 주기
        pItem = ListView2->Items->Item[StrToInt(m_strBeforePrior)];
        pItem = ListView2->Items->Item[StrToInt(pItem->Caption)-1];
        pItem->Focused = true;

        //삭제
        ListView2->Items->Delete(StrToInt(m_strBeforePrior));
    }
}//여기서 에러납니다.
//---------------------------------------------------------------------------

+ -

관련 글 리스트
54509 AccessViolation Error 조언 부탁드립니다 우오아항 1087 2008/09/08
54511     Re:AccessViolation Error 조언 부탁드립니다 장성호 989 2008/09/08
54513         Re:Re:AccessViolation Error 조언 부탁드립니다(수정) 우오아항 1260 2008/09/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.