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
[48825] Re:Re:공유메모리의 크기를 가변적으로 하고 싶습니다.
newhuni [] 1462 읽음    2007-04-09 15:36
dd님 조언감사합니다.
염치불구하고 한가지만 어 여쭙겠습니다.
님의 말씀대로 사이즈를 계산하여 코딩하여 컴파일 하니  에러가 발생하지 않습니다.
그런데 실행을 시켜보면 메모리 참조 에러가 발생합니다.
(제 코딩이 잘못된것 같애요.... ㅠㅠ)

// 선언부
int AAA = 10;
int BBB = 10;
typedef struct _tag_
{
    int ***data;
    make(int cnt) {
        data = new int**[cnt];   <----- 요기
        for(int i=0;i<cnt;i++){
            data[i] = new int*[AAA];
            for(int j=0;j<AAA;j++){
                data[i][j] = new int[BBB];
            }
        }
    }
}TTAG;

// 소스
TTAG *tag;
tag->make(10);

이렇게 실행하였습니다.
tag를 포인터로 선언하지 않으면 실행은 잘 되는데...
공유메모리를 사용할 때 포인터형이 되야 하거든요...

MapViewOfFile(...)파일에서 리턴형이 포인터 형이라서요....

조언부탁드립니다....




dd 님이 쓰신 글 :
: 3차원 배열이면 아래 소스대로 하자면 사이즈 계산이 대충 이렇네요.
: 총사이즈 = cnt * AAA * BBB * sizeof(int)
: 예를 들면 이렇게 할 수 있네요.
:
: int shared_size = cnt * AAA * BBB * sizeof(int);
: typedef struct _tag_ {
:    int * array;
: } TTAG;
: int & array(int i, int j, int k) { return TTAG.array[i*AAA*BBB + j*BBB + k] }
:
: hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, // 대상 파일의 핸들값
:                     NULL,                 // 보안정보 관련(default null)
:                     PAGE_READWRITE,       // Access Type
:                     0,                    // FileMap Object size(high)
:              ---------    -->    sizeof(shared_size),   // FileMap Object size(low)
:                     MMFileName);          // FileMap Object Name
:
:
: newhuni 님이 쓰신 글 :
: : 안녕하세요... 
: : 오늘도 고수님들께 조언을 구하고자 글을 올립니다. ^^;;;
: :
: : 공유메모리를 사용하여 두개 이상의 프로세스에서 데이타를 교환하고 있습니다.
: : 하나의 구조체를 생성하여 공유메모리를 구성하였는데.
: : 프로그램 설치환경(시스템 구성)에 따라 데이타의 양이 많이 다릅니다.
: : (적게는 수메가, 많게는 수백메가에 다다릅니다.)
: :
: : 그래서 공유메모리를 가변적으로 구성하고싶습니다.
: : 생각하는것은 외부에 INI파일을 만들어 INI파일에 데이타의 크기를 저장하고,
: : 실행할때 이 값을 읽어와 공유메모리를 구성하고싶습니다.
: : ---------------------------------------------------------------------------------------
: :
: : 현재 구조체의 데이타 변수(3차원 배열)를 동적으로 할당하는 (아래와 같은)방법으로 접근하고 있습니다.
: :
: : int AAA = 10;
: : int BBB = 10;
: : typedef struct _tag_
: : {
: :     int ***data;
: :     make(int cnt) {
: :         data = new int**[cnt];
: :         for(int i=0;i<cnt;i++){
: :             data[i] = new int*[AAA];
: :             for(int j=0;j<AAA;j++){
: :                 data[i][j] = new int[BBB];
: :             }
: :         }
: :     }
: : }TTAG;
: :
: :
: : 그런데 처음 공유메모리를 생성하는 부분에서 구조체의 크기를 줘야 하는데...
: : 여기서 부터 막힙니다. 동적으로 할당하다 보니 구조체의 크기가 고정이지 않아
: : 크기 자체를 어떻게 줘야 할지... 모르겠습니다.
: :
: : // Memory Mapped File Create.
: : hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, // 대상 파일의 핸들값
: :                     NULL,                 // 보안정보 관련(default null)
: :                     PAGE_READWRITE,       // Access Type
: :                     0,                    // FileMap Object size(high)
: :             ---------    -->    sizeof(SharedData),   // FileMap Object size(low)
: :                     MMFileName);          // FileMap Object Name
: : if(hFileMap == NULL) // Create fail
: : {
: :     ShowMessage("Unable to create file mapping !");
: :     return;
: : }
: :
: : 위와 같이 접근하는게 틀린가요???
: : 다른방법으로 공유메모리를 가변적으로 생성할 수 있을까요???
: :
: : 고수님의 조언부탁드립니다...

+ -

관련 글 리스트
48815 공유메모리의 크기를 가변적으로 하고 싶습니다. newhuni 1283 2007/04/09
48818     Re:공유메모리의 크기를 가변적으로 하고 싶습니다. dd 2591 2007/04/09
48825         Re:Re:공유메모리의 크기를 가변적으로 하고 싶습니다. newhuni 1462 2007/04/09
48827             Re:Re:Re:공유메모리의 크기를 가변적으로 하고 싶습니다. dd 2407 2007/04/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.