[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:

이게 동작할 거라고 생각하신 이유가 뭐죠?
이게 동작할 거라고 생각하신 이유가 뭐죠?
포인터를 안붙였더라구요..
답변 감사드립니다 ㅎㅎ ㅠㅜ !!
댓글 달기