[C++] 포인터/ Call by value 활용한 구조체 초기화 질문이요!
글쓴이: 익명 사용자 / 작성시간: 일, 2019/05/19 - 2:52오후
memset을 사용 할 수 없는데 큰 배열 초기화가 필요할 때 주로 구조체를 만들어서 memset 대신 사용하고 있었는데요.. 오늘 다음과 같은 경우에 Runtime Error 가 뜨더라구요. 코드는 다음과 같습니다.
typedef struct _data { int num; struct _data * next; }DATA; typedef struct _clear { DATA clear[526333 + 10]; }CLEAR; typedef struct _cdata { DATA clear[10005][128]; }CDATA; DATA * dtable[526333 + 10]; CLEAR dtclear; DATA databox[10005][128]; CDATA cdata; void initUser(int dataN) { static int det = 0; if (det) { *(CLEAR *)dtable = dtclear; *(CDATA *)databox = cdata; } det = 1; }
위 코드가 Runtime Error 난 코드고, 아래로 변경 하니까 정상 동작 되었습니다.
typedef struct _data { int num; struct _data * next; }DATA; typedef struct _clear { DATA clear[526333 + 10]; }CLEAR; typedef struct _cdata { DATA clear[10005][128]; }CDATA; DATA databox[10005][128]; CDATA cdata; DATA * dtable[526333 + 10]; CLEAR dtclear; void initUser(int dataN) { static int det = 0; if (det) { *(CLEAR *)dtable = dtclear; *(CDATA *)databox = cdata; } det = 1; }
제 생각엔.. 컴파일러가 자체적으로 전역변수를 잡을때.. 변수 주소값 인라인에 문제가 있었을 것 같은데..
확실하지가 않네요 ㅠㅠ 원래 이런 방법으로 초기화 하는게 위험한건가요??
Forums:
이게 동작할 거라고 생각하신 이유가 뭐죠?
이게 동작할 거라고 생각하신 이유가 뭐죠?
포인터를 안붙였더라구요..
답변 감사드립니다 ㅎㅎ ㅠㅜ !!
댓글 달기