그래서, 내가 가진 구조 :구조체 포인터에 대한 설명을 찾고
typedef struct {
int (*compare)(const void *a, const void *b);
struct node *head;
struct node *tail;
} *QueueADT;
그것을 호출 "* QueueADT는"자동 포인터에있는 "QueueADT"항목을 만드는 것이 나의 이해는합니다. 따라서 :
QueueADT queue;
이전에 정의 된 구조에 대한 포인터 일 수 있습니다. 그런 구조를 어떻게 malloc하는지 궁금합니다. 일반적으로 다음과 같습니다 :
QueueADT queue = malloc(sizeof(QueueADT));
그러나 "QueueADT"는 포인터가 아닙니다. 그래서 당신은 단지 큐 구조체에 대한 포인터를위한 충분한 메모리를 할당하지 않습니까? 내 코드를 사용하여 valgrind에 잘못된 쓰기가 발생했습니다. 내 큐가 잘못 초기화 된 결과입니다.
내가 사용하려면 QueueADT queue = malloc (sizeof * queue); – pmg
불투명 한 데이터 유형으로 사용하지 않는 한 typedef 뒤에 포인터를 숨기는 것은 좋지 않은 생각이다. 또한 같은 이름을 사용하여 태그에 대한 struct 태그와 typedef를 정의 할 수 있습니다. – Deduplicator