所以说我有一个来自双向链表的节点
typedef struct node
{
struct node *pPrev;
struct node *pNext;
struct record *data;
}Node;
和以下结构命名记录,在该命名的songlength中有一个struct
typedef struct record
{
char *artist;
char *album;
char *song;
char *genre;
struct songlength *length;
int played;
int rating;
}Record;
typedef struct songlength
{
int mins;
int secs;
}SongLength;
我将如何为这样的事情分配内存 . 我知道如何在列表的每个节点中为单个int做一个简单的malloc / make节点 .
Node *makeNode (int newData)
{
Node *pMem = NULL;
pMem = (Node *) malloc (sizeof (Node));
pMem -> data = newData;
pMem -> pNext = NULL;
return pMem;
}
在目前的状态,我不知道如何做到这一点 . 因为我所有的尝试都会导致混乱的记忆混乱 .
3 回答
不要投射
malloc()
和家人的结果 .首先为pMem分配内存 . 因此,数据是一个结构,因此必须为其分配内存以访问该结构成员 .
而不是尝试正确调用
malloc
,而是更改结构的定义 .改变这个:
对此:
还有这个:
对此:
由于这些结构不用作链表的实际节点,因此似乎没有任何合理的理由来动态分配它们(除非您打算在没有
record
的情况下使用某些Node
,或者在没有songlength
的情况下使用某些record
) .当您知道所需数据的确切数量时,动态内存分配非常有用(您不必动态分配"every structure out there") .
为每个结构成员填写相应的值 . 由于您有
char*
作为您的结构成员,请确保在存储一些值之前为它们分配内存 .除了内存分配,请确保在成员中填写正确的值,因为我看到
newdata
是int类型,它应该用于填充int
类型的成员,因为你没有这样做,请确保你修复它 .使用内存后,请使用
free(pointer)
释放内存