如何使用head代替struct节点?

时间:2018-07-08 18:42:50

标签: c data-structures

我做了一个函数,可以在一个以整数作为参数的链表中创建一个节点。使用此功能时,我的程序运行良好,但我怀疑是在这里使用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;
}

请注意,我将head声明为以下全局变量:

struct node* head;

很明显,head是一个指针变量(指向struct节点的指针),它将仅占用4个字节的内存,而(struct节点)将占用8个字节的内存。 我的疑问是:当我使用head in sizeof运算符而不是struct节点时,那就是

struct node *temp=(struct node*)malloc(sizeof(head));

我没有收到错误,也没有警告,并且得到了与以前完全相同的答案,但是对于内存头(4个字节,包含整数形式的地址)和结构节点(8个),内存分配将有所不同字节),那么它不应该影响我的程序吗?

1 个答案:

答案 0 :(得分:0)

是的,您可能会遇到问题。由于C不会为您做任何边界检查,因此您只会对C正常工作有一种幻想。您只是很幸运,没有其他人正在使用您在* next指针中访问的内存。因此,如果您在数分钟/小时后在另一台计算机或同一台计算机上尝试此代码,则可能无法正常工作。您本质上是通过覆盖尚未分配的内存来破坏此处的内存。