안녕하세요 햇병아리 빌더 개발자입니다.
RAD Studio XE로 모니터링 프로그램을 개발하고 있습니다.
여러 장비에서 들어오는 값들을 저장하기 위하여 헤더파일에 구조체를 선언하여 아래와 같이 프로그래밍을 했습니다.
public:
struct A{
int a;
int b;
B *b[40];
};
struct B{
int a;
AnsiString b;
};
한 장비당 여러개의 셀이 들어있기 때문에 위와 같이 구조체 안에 구조체를 선언하여 만들었습니다.
그리고 실제 메모리를 생성해줬습니다.
for (int i = 0; i < 40; i++) {
A[i] = (A *)malloc(sizeof(A));
for (int j = 0; j < 40; j++) {
A[i]->B[j] = (B *)malloc(sizeof(B));
}
}
여기까지 별 문제가 없이 메모리를 생성 하는 것 같았습니다.
오류도 워닝도 없이 컴파일도 잘 되었습니다.
for (int i = 0; i < 40; i++) {
A[i]->a = 0;
A[i]->b = 0;
for (int j = 0; j < 40; j++) {
A[i]->B[j]->a = 0;
A[i]->B[j]->b = " ";
}
}
그래서 위와 같이 기본값으로 초기화 하기 위해서 코딩을 했더니 메모리 오류가 나는 것입니다.
A[i]->B[j]->b = " ";
이 코드를 주석 처리하면 정상적으로 메모리 오류가 나지 않습니다.
또는 for문의 i의 값을 40이 아니라 10개로 하면 오류가 나지 않습니다.
디버깅 해보니 for문의 i 값이 13정도가 되면 메모리 오류가 납니다..
메모리가 생성되지 않았나 싶어서 강제적으로
A[15]->B[23]->b = "test";
로 넣어보면 정상적으로 들어가 있습니다...
왜 이런현상이 일어나는지 궁금해서 미칠 지경입니다.. 조언좀 부탁드리겠습니다.
|