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
에서struct
type, 필드의 크기를 재귀적으로 호출합니다.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
'source' 카테고리의 다른 글
ORA-00907 오른쪽 괄호 없음 문제 - 내부 삽입 쿼리 순서로 선택 (0) | 2023.08.27 |
---|---|
작동 중인 중단된 쿼리의 수수께끼 (0) | 2023.08.27 |
MySQL의 쿼리에서 반환된 각 행에 대한 쿼리 호출 (0) | 2023.08.27 |
Spring MVC의 Ajax 요청에서 세션 시간 초과 탐지 (0) | 2023.08.27 |
그리드 보기 행 명령에서 데이터 키 값 가져오기 (0) | 2023.08.27 |