我做了一个函数,可以在一个以整数作为参数的链表中创建一个节点。使用此功能时,我的程序运行良好,但我怀疑是在这里使用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个),内存分配将有所不同字节),那么它不应该影响我的程序吗?
答案 0 :(得分:0)
是的,您可能会遇到问题。由于C不会为您做任何边界检查,因此您只会对C正常工作有一种幻想。您只是很幸运,没有其他人正在使用您在* next指针中访问的内存。因此,如果您在数分钟/小时后在另一台计算机或同一台计算机上尝试此代码,则可能无法正常工作。您本质上是通过覆盖尚未分配的内存来破坏此处的内存。