# include <stdio.h>
# include <stdlib.h>
# include <stdbool.h>
typedef struct LNode {
int elem;
struct LNode* next;
}Node, * List;
List init() {
List list = (List)malloc(sizeof(Node));
list->elem = 0; list->next = NULL;
return list;
}
int length(List list) {
return list->elem;
}
bool isEmpty(List list) {
return list->next == NULL;
}
void add(List list, int elem) {
Node node = { elem,NULL };
node.next = list->next;
list->next = &node;
list->elem++;
}
void append(List list, int elem) {
Node node = { elem,NULL };
List cur = (List)malloc(sizeof(Node));
cur = list->next;
while (cur != NULL) {
cur = cur->next;
}//结束while语句后,cur是一个nullptr
cur = &node;
list->elem++;
}
int* travel(List list) {
int* num = (int*)malloc(sizeof(int) * length(list));//初始化num数组
int i = 1;
if (isEmpty(list)) {
printf("链表为空!");
num = NULL;
}
else {
List cur = (List)malloc(sizeof(Node));
if (!cur) {
printf("申请内存失败!");
exit(0);
}
cur = list->next;
while (cur != NULL) {
printf("链表第%d个节点为:%d\n", i, cur->elem);
num[i - 1] = cur->elem;
i++;
cur = cur->next;
}
}
return num;
}
int main() {
List list = init();
add(list, 3);
add(list, 2);
add(list, 1);
append(list, 4);
printf("链表是否为空:%d\n", isEmpty(list));
printf("链表长度为:%d\n", length(list));
travel(list);
return 0;
}
大佬能帮下忙吗? 单链表出现的读取访问权限冲突
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- bobhuang 2020-05-29 19:35关注
add 函数中node是局部变量,函数结束后对应的变量空间就失效了,会在后续的执行中被篡改。要用malloc申请一个Node变量空间,才能真正add一个有效的Node.
append函数, cur在malloc赋值后直接赋值成list->next,内存泄漏了。而整个while以cur==NULL结束,没有真正找到append的点,应该以NULL==cur->next 结束。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 求daily translation(DT)偏差订正方法的代码
- ¥15 js调用html页面需要隐藏某个按钮
- ¥15 ads仿真结果在圆图上是怎么读数的
- ¥20 Cotex M3的调试和程序执行方式是什么样的?
- ¥20 java项目连接sqlserver时报ssl相关错误
- ¥15 一道python难题3
- ¥15 牛顿斯科特系数表表示
- ¥15 arduino 步进电机
- ¥20 程序进入HardFault_Handler
- ¥15 关于#python#的问题:自动化测试