我正在建立一个链接列表并尝试为此分配内存
struct node *new_node = (node*) malloc(sizeof(node) * 5);
为5个节点提供足够的内存。现在通过以下方式访问第一个节点:
new_node->data = new_data;
很好,但是当我将另一个节点链接到new_node->接下来,我忘了我怎么说新节点是我已经分配的内存的一部分。每次我想要一个新节点时,我都不想使用malloc作为我正在进行的作业的目的,我们希望尽可能少地使用malloc。
任何线索都非常感激,到目前为止,我还没有能够在宽阔的网上找到我需要的东西。
约翰!
答案 0 :(得分:0)
你弄错了,你不需要为五个节点分配空间并用第一个节点指向它们,而不是
struct node *head = malloc(sizeof(struct node));
if (head == NULL)
return errorHandler();
head->next = malloc(sizeof(struct node));
.
.
.
等等。
我在那里做的是为一个节点分配空间,当我需要一个新节点时,我为它分配空间并使用next
的{{1}}字段指向它。
答案 1 :(得分:0)
当单独分配任何新元素的内存时,非常简化的解决方案:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data; // some data, not a link to next element
struct node * next;
};
int main()
{
struct node *head = NULL; //
struct node *tail = NULL; //
// creating the first node
head = (node*) malloc(sizeof(node));
if(head != NULL)
{
tail = head;
tail->next = NULL;
// fill the data here
}
// creat any more
for(int i = 1; i < 5; i++)
{
tail->next = (node*) malloc(sizeof(node)); // create new
if(tail->next != NULL)
{
tail = tail->next; // move tail to next
tail->next = NULL;
// fill the data here
}
}
}
当然,节点(插入,删除等)的操作应该被组织为函数。
但是,如果您想保存原始内存分配方法,请考虑以下事项:
// allocation memory for 5 elements
struct node *new_node = (node*) malloc(sizeof(node) * 5);
// arranging pointers
for(int i = 0; i < 4; i++)
{
new_node[i].next = &new_node[i+1];
}
new_node[4].next = NULL; // like a sign of the END
答案 2 :(得分:0)
Node* five = malloc( 5 * siozeof(Node) );
int nxt = 0;
Node* p = &five[nxt++];
p->next = &five[nxt++];
等