在双重链接列表

时间:2018-06-16 20:49:12

标签: c memory linked-list malloc doubly-linked-list

我尝试在双向链表中执行插入和删除等操作,但在插入1-2个元素后,malloc()函数没有分配任何内存。在这里,我展示了我的部分代码。希望它有所帮助

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct node{
    int info;
    struct node *prev,*next;
}*start=NULL;

以下是创建DLL的代码

struct node* createlist()
{
    int data;
    printf("\nEnter the data: ");
    scanf("%d",&data);

        struct node* temp=(struct node *)malloc(sizeof(struct node*));
        if(temp==NULL){
        printf("\nOUT of Memory\n");
        return;
        }
        else{
        temp->info=data;
        temp->next=NULL;
        temp->prev=NULL;
        start=temp;
        }

}

这是在列表开头插入的代码。在1-2次插入后,由于没有记忆,不能再插入。

void insertatbeg(){
    int data;
    printf("\nEnter the data: ");
    scanf("%d",&data);
    struct node* temp=(struct node *)malloc(sizeof(struct node*));
        if(temp==NULL){
        printf("\nOUT of Memory\n");
        return;
        }
        else{
            temp->info=data;
            temp->prev=NULL;
            temp->next=start;
            start->prev=temp;
            start=temp;
        }
}

另外,我想声明我有4 GB RAM。所以,我没有找到任何这种行为的理由。

2 个答案:

答案 0 :(得分:2)

您没有为对象分配足够的内存。而不是分配sizeof(struct node*)您想要sizeof(struct node)。我猜测分配不足会导致你覆盖内存。

答案 1 :(得分:2)

sizeof(struct node *)是指针的大小,小于结构所需的大小,因此您有未定义的行为。相反,使用:

malloc(sizeof(struct node))