source

C에서 구조물에 메모리 할당

nicesource 2023. 8. 27. 09:39
반응형

C에서 구조물에 메모리 할당

저는 구조물에 메모리를 동적으로 할당하는 프로그램을 만드는 임무를 맡고 있습니다.보통 우리는 사용할 것입니다.

x=malloc(sizeof(int)*y);

그러나 구조 변수에는 무엇을 사용합니까?할 수 있을 것 같지는 않습니다.

struct st x = malloc(sizeof(struct)); 

누가 저 좀 도와주실 수 있나요?감사합니다!

내가 가장 좋아하는 것:

#include <stdlib.h>

struct st *x = malloc(sizeof *x); 

참고:

  • x포인터여야 합니다.
  • 깁스가 필요하지 않음
  • 적절한 헤더 포함

당신은 그것을 제대로 하고 있지 않습니다.struct st x포인터가 아니라 구조입니다.스택에 하나를 할당하고 싶다면 괜찮습니다.힙에 할당할 경우struct st * x = malloc(sizeof(struct st));.

struct st* x = malloc( sizeof( struct st ));

정확히 그렇게 하는 것이 가능합니다 - 그리고 올바른 방법입니다.

입력할 의도였다고 가정하면

struct st *x = malloc(sizeof(struct st)); 

ps. 모든 콘텐츠의 크기를 알 때도 size (struct)를 해야 합니다. 왜냐하면 컴파일러는 멤버들이 정렬되도록 구조물을 패딩할 수 있기 때문입니다.

struct tm {
  int x;
  char y;
}

와 크기가 다를 수 있습니다.

struct tm {
  char y;
  int x;
}

이 작업은 다음을 수행해야 합니다.

struct st *x = malloc(sizeof *x); 

struct st *x = (struct st *)malloc(sizeof(struct st));

내 생각엔, 네가sizeof에서structtype, 필드의 크기를 재귀적으로 호출합니다.struct.그렇게,struct st *x = malloc(sizeof(struct st));정말로 효과가 있는 경우에만struct st크기가 고정되어 있습니다.이것은 구조체에 변수 크기 문자열과 같은 것이 있고 매번 최대 길이를 지정하지 않으려는 경우에만 중요합니다.

일반적으로,

struct st *x = malloc(sizeof(struct st));

때때로 당신은 가변 크기 구조체나 '추상적' 구조체(Java의 추상 클래스)와 마주치게 될 것이고 컴파일러는 당신에게 struct의 크기를 결정할 수 없다고 말할 것입니다.이러한 경우, 당신은 손으로 크기를 계산하고 숫자와 함께 malloc를 호출하거나, 당신이 원하는 구조의 완전히 구현된 malloc'd 버전을 반환하는 함수를 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/2177391/allocating-memory-for-a-structure-in-c

반응형