Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的内存分配,堆中的链表_C_Malloc - Fatal编程技术网

C语言中的内存分配,堆中的链表

C语言中的内存分配,堆中的链表,c,malloc,C,Malloc,我正在构建一个单链表,并试图像这样为它分配内存 struct node *new_node = (node*) malloc(sizeof(node) * 5); 所以有足够的内存容纳5个节点。现在通过以下方式访问第一个节点: new_node->data = new_data; 很好,但是当我将另一个节点链接到new_node->next时,我忘记了如何说新节点是我已经分配的内存的一部分。我不希望每次我想要一个新节点时都进行malloc,因为为了我正在处理的任务,我们希望尽可能不频繁

我正在构建一个单链表,并试图像这样为它分配内存

struct node *new_node = (node*) malloc(sizeof(node) * 5);
所以有足够的内存容纳5个节点。现在通过以下方式访问第一个节点:

new_node->data = new_data;
很好,但是当我将另一个节点链接到new_node->next时,我忘记了如何说新节点是我已经分配的内存的一部分。我不希望每次我想要一个新节点时都进行malloc,因为为了我正在处理的任务,我们希望尽可能不频繁地进行malloc

非常感谢您提供的任何线索,到目前为止,我还没有在广域网上找到我需要的东西


约翰

您搞错了,您不需要为五个节点分配空间,而是用第一个节点指向它们

struct node *head = malloc(sizeof(struct node));
if (head == NULL)
    return errorHandler();
head->next = malloc(sizeof(struct node));
.
.
.
等等


我在那里做的是为一个节点分配空间,当我需要一个新节点时,我为它分配空间,并用struct节点的下一个字段指向它。

当为任何新元素单独分配内存时,非常简化的解决方案是:

包括 包括 结构节点 { int data;//一些数据,而不是到下一个元素的链接 结构节点*下一步; }; int main { 结构节点*head=NULL// 结构节点*tail=NULL// //创建第一个节点 head=节点*mallocsizeofnode; ifhead!=NULL { 尾=头; tail->next=NULL; //在这里填写数据 } //再创造 福林系数i=1;i<5;i++ { tail->next=node*mallocsizeofnode;//新建 iftail->next!=空 { tail=tail->next;//将tail移动到下一个 tail->next=NULL; //在这里填写数据 } } } etc

Node* five = malloc( 5 * siozeof(Node) );
int nxt = 0;

Node* p = &five[nxt++];
p->next = &five[nxt++];