님이 쓰신 글 :
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: tlist = new TList();
// pImg 를 멤버 변수로 선언한것 같은데..
// 지역,전역,멤버, 변수 통용 범위 규칙를 모르고 있는걸로 보입니다.
// pImg 중복선언되었고 이 함수 벗어나면 초기화 됩니다(변수통용범위)
// 따라서 멤버변수 pImg 에는 아무값도 없는 상태입니다.
: TImage *pImg[]= {Image1,Image2,Image3,Image4,Image5,Image6};
: }
:
: ---------------------------------------------------
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
: int n = 0;
: TSearchRec sr;
: int iAttributes = 0;
: if(LMDDirDlg1->Execute())
: {
: //폴더내의 jpg파일만 불러오기
: String path = LMDDirDlg1->Path + "\\*.jpg";
: if(FindFirst(path, faAnyFile, sr) == 0)
: {
: do
: {
// 아래 코드는 아무것도 안하는 코드입니다.
// if 문으로 되어 있는걸 잘못 가져온걸로 보이네요
: (sr.Attr & iAttributes) == sr.Attr;
: list = new List();
// 여기서는 왜 n+1 이죠 ? 의도한대로 한거라면 상관없지만
// 아니라면 메모리 파괴가 일어날수 있습니다.
// 그리고 여기서는 어떤 역활도 하는게 없네요.
: Image[n+1] = new TImage(this);
: list->i = sr.Name;
: tlist->Add(list);
// 이것도 불필요한 코드 네요
: list = (List*) tlist->Items[n];
// 동적할당을 하려고 한것 같은데 방법이 틀렸습니다.
// 특히 위에 TImage *pImg[] = 위에 설명한 부분 때문에 이 코드에서는 access vio.. 날수 밖에 없습니다.
// 또한 *pImg[] = 로 제대로 할당했다고 해도.. jpg 파일 갯수가 초과되는 경우 또 에러납니다.
: pImg[n]->Picture->LoadFromFile(LMDDirDlg1->Path + "\\" + list->i);
: n++;
:
// 그리고 new 로 메모리 할당을 했는데 해제는 하셨는지도 의심스럽네요.
: }
: while(FindNext(sr) == 0);
: }
: FindClose(sr);
: }
:
: //폴더 경로를 Edit에 표시
: Edit1->Text = LMDDirDlg1->Path;
:
: 제가 이미지 리스트에 이미지를 다같이 출력할려고 하는데 보시다시피 코드는 위에 처럼 짜놔둔 상태에서 실행을 하면 실행은 정상적으로 되지만 폴더에 있는 이미지 파일을 가져올때 첨부파일과 같은 오류가 나오면서 이미지 출력이 되지 않습니다.
: 혼자서 여러방법으로 해보고는 있는데 해결이 되지않아요.
: 간략한 해결팁이라도 주시면 감사합니다.
:
:
|