双向链表中的插入和删除
Insertion and deletion in 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。所以,我没有找到这种行为的任何原因。
您没有为您的对象分配足够的内存。而不是分配 sizeof(struct node*)
你想要 sizeof(struct node)
。我猜分配不足导致您覆盖内存。
sizeof(struct node *)
是指针的大小,小于您的结构所需的大小,因此您有未定义的行为。相反,使用:
malloc(sizeof(struct node))
我试图在双向链表中执行一些操作,如插入和删除,但在插入 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。所以,我没有找到这种行为的任何原因。
您没有为您的对象分配足够的内存。而不是分配 sizeof(struct node*)
你想要 sizeof(struct node)
。我猜分配不足导致您覆盖内存。
sizeof(struct node *)
是指针的大小,小于您的结构所需的大小,因此您有未定义的行为。相反,使用:
malloc(sizeof(struct node))