Access Violation 오류는 거의 생성되있지않은공간을 이용하려고할때 발생합니다.
쉬운 예는
배열의 크기를 3으로 생성해놓고, 4번5번째 배열을 사용하는경우 발생하죠...
또 리스트박스에 항목이 1개만 추가도있는데 2번 항목을 어떠한 작업을 진행할경우 발생합니다.
혹시 모르니 참고만 하시길.............
앨리스 님이 쓰신 글 :
:
: 프로젝트를 진행하면서 DLL 파일을 하나 써야할 일이 생겼습니다.
:
: struct ResultData
: {
: Double No;
: char* name;
: char* value;
: char* min
: cahr* max;
: };
:
:
:
: int Upload(int Id, char* sessionName, int DataSize , struct ResultData* ResultDataArray, char* ErrCode);
:
: 대략 이런형식의 함수인데요. 결과값을 구조체에 넣어 배열형태로 DLL에 넣어야 하여,
:
: TResultData = Record
:
: No : Double;
: Name : PChar;
: Value : Pchar;
: min : Pchar;
: max : Pchar;
:
: end;
:
: TResultArr = Array of TResultData;
:
: function upload(ID:Integer;sessionName:Pchar;DataSize:Integer;var ResultData:TResultArr; var ErrCode:PChar);
:
: 이런식으로 포팅하여 실행해보았는데요.
:
: Access Violation 이 나면서 집에 들어가지 못하게 된 상황이 발생하였습니다. (...)
:
: 구조체로 입력하는 부분이 없는 다른 함수들은 잘 실행이 되는데, 구조체로 값을 입력해야 하는
:
: 저 함수만 실행하면 에러가 박박박 뜨네요. ;ㅁ;
:
: TResultArr 를 ^TResultArr 하여 PResultArr 로 만들어 넣어도 보고, 포인터 변수로 넣어도 보고
:
: ResultData를 포인터로 바꿔도 넣어보고 등등 별짓을 다 해봤는데, 몽땅 에러가 나구요 (...)
:
: function upload(ID:Integer;sessionName:Pchar;DataSize:Integer;var ResultData:TResultData; var ErrCode:PChar);
:
: 로 그냥 구조체 하나만 넣었을때는 에러가 없지만, 그렇게는 쓸수가 없는 함수여서...
:
: C로 된 구조체에선 그냥 ResultData* 로 선언한것을 Allocmem 하고 각 배열에서 다시 각 필드를 allocmem
:
: 하여 그냥 넣게 되어있는데, 왜 델파이에선 똑같이 한다고 해봐도 다 에러가 나는 걸까요 ;ㅁ;
:
: 출장와서 셔츠하나를 4일째 입고 있으려니, 몸이 간질간질해서 내일은 꼭 집에 가고 싶네요 ;ㅁ;
:
: 아시는 분들의 도움을 부탁드립니다. ㅠ_ㅠ
:
|