C++struct 대상 이 가 변 크기 의 배열 을 가지 도록 합 니 다(상세 설명)

1146 단어 cstruct배열
먼저'Inside The C++Object Model'의 한 단락 을 발췌 합 니 다.
단일 요소 의 배열 을 struct 의 끝 에 놓 기 때문에 모든 struct objects 는 가 변 크기 의 배열 을 가 질 수 있 습 니 다.

struct mumble {

  char pc[1];

};

//       ,   struct              

struct mumble *pmumbl = (struct mumble*)malloc(sizeof(struct
mumble) + strlen(string) + 1);

strcpy(pmumbl->pc, string);

 
책 에 서 는 이미 분명하게 말 했 지만 개인 적 으로 이해 할 때 부터 문제 가 생 겼 습 니 다.mumble 대상 의 pc 구성원 이 스 택 에 있다 고 잘못 생각 했 습 니 다.strcpy 작업 으로 인해 배열 이 넘 쳐 후속 메모 리 를 덮어 썼 다 고 생각 했 습 니 다.
실제 대상 포인터 pmumbl 이 가리 키 는 메모 리 는 모두 더미 위 에 있 습 니 다.아래 그림 과 같 습 니 다.

포인터 pmumbl 은 malloc 가 할당 한 전체 메모리 입 니 다.pmumbl->pc 는 이 메모리 의 첫 번 째 바이트 입 니 다.malloc 작업 은 전체 string 에 충분 한 메모 리 를 분 배 했 기 때문에 strcpy 에 서 는 pc 의 메모리 범위 가 넘 쳤 지만 struct 의 메모리 범위 가 넘 치지 않 아 strcpy 의 결 과 를 합 리 적 이 고 제어 할 수 있 습 니 다.이렇게 되면 struct 가 가 변 크기 의 배열 을 가지 고 더욱 유연 해 지 는 셈 이다.
이상 은 여러분 에 게 가 져 온 C++struct 대상 이 가 변 크기 의 배열(상세 설명)의 모든 내용 을 가지 게 되 었 습 니 다.많은 응원 부 탁 드 리 겠 습 니 다~

좋은 웹페이지 즐겨찾기