c-将内存分配给包含结构的节点



假设我有一个来自双链表的节点

typedef struct node
{
struct node *pPrev;
struct node *pNext;
struct record *data;
}Node;

以及以下结构体命名的记录,该结构体在命名的歌曲长度内

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;
}

在目前的状态下,我不知道该怎么做。因为我所有的尝试都导致了记忆的混乱。

不要强制转换malloc()和族的结果。

pMem = malloc (sizeof (Node));// It is for first structure.
pMem ->data=malloc(sizeof(struct record));
pMem->data->lenght=malloc(sizeof(struct songLength));

第一次分配是为pMem分配内存。因此,数据是一个结构,因此必须为其分配内存才能访问该结构成员。

与其尝试正确调用malloc,不如更改结构的定义。

更改此项:

struct record *data;

对此:

struct record data;

这个:

struct songlength *length;

对此:

struct songlength length;

由于这些结构没有用作链表的实际节点,因此似乎没有任何充分的理由动态分配它们(除非您打算让一些Node没有record,或者让一些record没有songlength)。

只有在运行时才知道所需数据的确切数量时,动态内存分配才非常有用(不必动态分配"所有结构")。

Node *p = malloc(sizeof(NODE));
p->data = malloc(sizeof(struct record));
// Allocate memory to the pointers within this structure
p->data->artist = malloc(30);
p->data->length = malloc(sizeof(struct songLength));

为每个结构成员填写相应的值。由于您有char*作为结构成员,请确保在存储一些值之前为它们分配内存。

除了内存分配之外,请确保在成员中填写正确的值,因为我看到newdata是int类型的,它应该用于填写int类型的成员,因为你没有这样做,请确保修复它。

使用内存后,请使用free(pointer) 释放内存

相关内容

  • 没有找到相关文章

最新更新