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
[74083] Re:Re:Re:윈도우 10 64bit 에서 문제점
정성훈.해미 [sage5nor] 3607 읽음    2017-01-04 11:24
1. 구조체 선언이 좀 이상하네요.
typedef struct _man_data_
{
    char name[MAX_SIZE1];
    int  value[MAX_SIZE2];

    struct _man_data_ *ps[MAX_SIZE3];    <<<<---- 구조체 자신을 내부 자료형으로 선언하는건 첨 봅니다

} MAN_DATA;

위의 구조체 내부 변수 선언부가 이상하네요.

정상적인 것으로 본다면


2. 자료형의 기본 크기를 일정하게 만들어주는 작업을 해야 합니다.
일반적으로
OS 환경에 따라 메모리 할당하는 기본 크기가 달라집니다.

프로그램에서 사용하는 변수의 크기가 달라지는 것이지요.

한가지 예로,
int형의 경우  32비트와 64비트에서 할당하는 크기가 달라집니다.
64비트에서는 int형의 기본 크기가 2배로 됩니다.

이런 이유로,
자료의 크기가 OS와 상관 없이 일정한 크기로 잡히게 하기 위해
자료형 선언 앞뒤에 특정 키워드(지시문)을 추가합니다.

#pragma    pack(push, 1)      // <<-- 메모리 1바이트 정렬 사용

구조체1 선언
구조체2 선언
...
구조체n 선언

#pragma    pack(pop)          // <<-- 메모리 정렬 원래대로 복원

위와 같이 구조체 선언 맨 위와 맨 아래에앞 뒤에 메모리 정렬 지시어를 붙여주시면
어떤 OS에서도 같은 메모리 크기를 같는 구조체가 됩니다.



강우정 님이 쓰신 글 :
: 답변 감사합니다.
: 조언해주신데로 해보았지만 아직 해결은 되지 않았습니다.
:
:
: 누구야 님이 쓰신 글 :
: : 아마 abc 가 메모리가 할당 되지 않은 상태에서 사용해서가 아닐까요?
: : OFFICE_DATA *abc = new OFFICE_DATA;
: : 처럼 할당하고 사용하면 될것 같은데요,
: :
: :
: : 강우정 님이 쓰신 글 :
: : : 안녕하세요.
: : : 빌더 초보자 입니다.
: : : 아래 내용은 구조체로 선언한 값을 다른 부분으로 복사하는 부분입니다.
: : : 빌더는 6.0 버전을 사용하고 있구요.
: : :
: : : 아래 소스는 윈도우 7 (32bit, 64bit) 에서는 모두 잘 작동하구요.
: : : 윈도우 10에서는 32bit에서는 잘 작동하는데 64bit 에서는 안되는 것 같습니다.
: : : 특별한 오류 메세지는 없지만 복사가 되지 않습니다.
: : :
: : : 여기서 질문이 있는데요.
: : :
: : : 1. 어떤 부분이 윈도우 10 64bit 에서만 문제가 되는지요?
: : :
: : : 2. 소스를 수정해서 이 문제를 해결할 수 있는지요?
: : :
: : : 3. 아니면 컴파일러 ( 빌더 6.0 )의 한계이므로 신규 버전으로 컨버전 해야하는지요?
: : :
: : : 조언 부탁드립니다.
: : :
: : :
: : : // .h 구조체 선언부분입니다.
: : :
: : : typedef struct _man_data_
: : : {
: : :     char name[MAX_SIZE1];
: : :     int  value[MAX_SIZE2];
: : :
: : :     struct _man_data_ *ps[MAX_SIZE3];
: : :
: : : } MAN_DATA;
: : :
: : : typedef struct
: : : {
: : :     int a;
: : :     int b;
: : :
: : :     MAN_DATA data[MAX_A][MAX_B][MAX_C];
: : : } OFFICE_DATA;
: : :
: : :
: : : // .cpp 소스 부분입니다.
: : :
: : : OFFICE_DATA *abc;
: : :
: : : abc->data[x][y][z].ps[i] = &(abc->data[a][b][c]);
: : :

+ -

관련 글 리스트
74073 윈도우 10 64bit 에서 문제점 강우정 3624 2016/12/28
74076     Re:윈도우 10 64bit 에서 문제점 누구야 3675 2016/12/31
74082         Re:Re:윈도우 10 64bit 에서 문제점 강우정 3600 2017/01/03
74083             Re:Re:Re:윈도우 10 64bit 에서 문제점 정성훈.해미 3607 2017/01/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.