【发布时间】:2018-07-08 18:42:49
【问题描述】:
我做了一个函数来在一个以整数作为参数的链表中创建一个节点。当我使用这个功能时,我的程序运行良好,但我怀疑这里使用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 是一个指针变量(指向结构节点的指针),它只占用内存中的 4 个字节,而(结构节点)将占用内存中的 8 个字节。 我的疑问是:当我在 sizeof 运算符中使用 head 而不是 struct node 时,即
struct node *temp=(struct node*)malloc(sizeof(head));
我没有收到错误,没有警告,并且得到了与以前完全相同的答案,但是对于 head(4 个字节包含整数形式的地址)和 struct node(8字节),那么它不应该影响我的程序吗?
【问题讨论】:
-
如果您没有为
struct node分配足够的内存,您将调用未定义的行为 - 所以程序中可能会发生任何事情 -
如所写,您的结构无法编译。请提供minimal, complete, and verifiable example,以及您遇到的问题,以便我们帮助诊断问题所在。
-
您显示的结构是指您未显示的
struct node类型。这迟早会造成混乱,可能需要不必要的强制转换。 -
应该是
struct node *temp = malloc(sizeof *head);。我认为这是你不应该转换malloc的值的一个论点。
标签: c data-structures