程序可以运行,可以输入,可以输出,但是到了释放内存的时候就有问题了 求大神指正。
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}*LPNODE;
LPNODE CreateList(int n);
void ShowList(LPNODE lphead);
int main(void)
{
LPNODE lpHead, temp, current;
int num;
puts("请问您需要几个节点?");
scanf_s("%d", &num);
lpHead = CreateList(num);
ShowList(lpHead);
//释放链表
current = lpHead;
while (current != NULL)
{
temp = current->next;
free(current);
current = temp;
}
return 0;
}
LPNODE CreateList(int n)
{
int _data, count = 0;
LPNODE lpHead = NULL;
LPNODE current, prev;
lpHead = current = prev = (LPNODE)malloc(sizeof(LPNODE));
puts("请输入一个数字:");
while (scanf_s("%d", &_data))
{
current = (LPNODE)malloc(sizeof(LPNODE));
prev->next = current;
current->data = _data;
current->next = NULL;
prev = current;
count++; //控制循环
if (count < n)
puts("请输入下一个数字");
else
{
puts("输入结束!");
break;
}
}
return lpHead;
}
void ShowList(LPNODE lpHead)
{
LPNODE p = lpHead->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
}
free出错是因为你malloc的时候申请的空间不对。
lpHead = current = prev = (LPNODE)malloc(sizeof(LPNODE));以及current = (LPNODE)malloc(sizeof(LPNODE));不对
因为你sizeof(LPNODE)相当于sizeof(指针),在32位机上永远是4
你typedef的时候应该多取一个名字,假设叫LPLEN,然后应该改成(LPNODE)malloc(sizeof(LPLEN));
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}*LPNODE,LPLEN;
LPNODE CreateList(int n);
void ShowList(LPNODE lphead);
int main(void)
{
LPNODE lpHead, temp, current;
int num;
puts("请问您需要几个节点?");
scanf_s("%d", &num);
lpHead = CreateList(num);
ShowList(lpHead);
//释放链表
current = lpHead;
while (current != NULL)
{
temp = current->next;
free(current);
current = temp;
}
return 0;
}
LPNODE CreateList(int n)
{
int _data, count = 0;
LPNODE lpHead = NULL;
LPNODE current, prev;
lpHead = current = prev = (LPNODE)malloc(sizeof(LPLEN));
puts("请输入一个数字:");
while (scanf_s("%d", &_data))
{
current = (LPNODE)malloc(sizeof(LPLEN));
prev->next = current;
current->data = _data;
current->next = NULL;
prev = current;
count++; //控制循环
if (count < n)
puts("请输入下一个数字");
else
{
puts("输入结束!");
break;
}
}
return lpHead;
}
void ShowList(LPNODE lpHead)
{
LPNODE p = lpHead->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
}
printf("sizeof(LPNODE) = %d\n", sizeof(LPNODE));
printf("sizeof(node) = %d\n", sizeof(node));
sizeof(LPNODE) = 4
sizeof(node) = 8
内存大小计算错误。malloc(sizeof(LPNODE))
改为malloc(sizeof(node))
typedef struct node{
int data;
struct node *next;
}*LPNODE;
犯了指针与结构体大忌。。。。