thakurcoder Ответов: 1

Как мы можем использовать head вместо struct node?


я сделал функцию для создания узла в связанном списке ,который принимает целое число в качестве аргумента, моя программа работает нормально, когда я использую эту функцию, но мои сомнения находятся в malloc, используемом здесь

Что я уже пробовал:

моя структура такова
struct{
int data;
struct node*}

это моя функция вставки
void insert(int x){
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp->data=x;
temp->next=head;
head=temp;

}

внимание, заявил глава как глобальную переменную как
struct node* head;

ясно, что head-это переменная указателя(указатель на узел структуры), которая займет всего 4 байта
в памяти тогда как (struct node) займет 8 байт в памяти
я сомневаюсь в этом, когда я использую head в операторе sizeof вместо struct node, который является
struct node *temp=(struct node*)malloc(sizeof(head));
я не получаю никакой ошибки
никакого предупреждения и получения точного ответа, как было раньше, но распределение памяти будет отличаться для head(4 байта) и struct node(8 байт), это должно повлиять на мою программу??

1 Ответов

Рейтинг:
5

OriginalGriff

Ваша структура всегда будет больше указателя на нее: хотя бы потому, что фактический узел содержит указатель на структуру, поэтому он должен быть по крайней мере размером указателя плюс размер других элементов.

Так что да, вы должны использовать sizeof(struct node) когда ты malloc сам узел.
Если вы этого не сделаете, то да, у вас возникнут проблемы ... но вы можете не заметить их в развитии в зависимости от двух факторов: упаковки соседних узлов и детализации самого узла. malloc функция, которая часто не является тем , что вы думаете: некоторые системы всегда выделяют память в кратных 8 или 16 байтах, поэтому ваш код работает ... пока ваш компилятор или его параметры не изменятся ... :смеяться:

Всегда просите правильный размер: никогда не полагайтесь на "эффекты", чтобы вытащить вас из ямы!


thakurcoder

спасибо что помог мне я все понял

OriginalGriff

Всегда пожалуйста!