一、出现的问题:
二、问题分析:
1.通过逐行调试可以看到
当数据元素输入完后,红圈这里head指向的地址我们先记住,接下来我们对输入的数据进行打印
2.继续逐行运行
这里可以看到,在打印时传入的地址与1中的head地址并不相同,从而在读取链表head地址时并不是1中的head的地址,也就出现了如上的情况。这里楼主也不清楚具体是什么导致了传入地址的变化,还望有大佬指点。我也参考了另一位楼主的解决办法,如下解决:引发了异常: 读取访问权限冲突。 L 是 0xCDCDCDCD。_引发了异常: 读取访问权限冲突。 **this** 是 0xcdcdcdcd。-CSDN博客
但是似乎也没有得到解决,可能是我能力有限。
三、解决办法
既然通过逐行运行得知是传入PrintList的地址不一致而导致的,那么这里将CreateList函数的类型进行修改,并返回head的地址。代码如下:
#include "deffunction.h"
int main()
{
LinkList La;
La = CreateList1(&La, 5);
printf("输出链表数据如下:\n");
PrintList(La);
return 0;
}
deffunction.h如下:
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//创建链表类型
typedef struct Node
{
int data;
struct Node* next;
}LNode, * LinkList;
//初始化链表
LinkList InitList(LinkList head)
{
head = (LinkList)malloc(sizeof(LNode));
head->next = NULL;
return head;
}
//利用头插法创建链表
LinkList CreateList1(LinkList head, int n)
{
head = (LinkList)malloc(sizeof(LNode));
head->next = NULL;
LNode* p;
printf("请输入链表元素数据:\n");
for (int i = n; i > 0; i--)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%d", &p->data);
p->next = head->next;
head->next = p;
}
return head;
}
//打印链表元素
void PrintList(LinkList head)
{
LNode* p = head->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
}
运行结果如下:
第一次写文章,如有问题还望有大佬指点。