本人23考研,正在复习数据结构,今天在练习链表的时候,发生了两个问题,求各位帮忙看一看T_T
第一个问题:打印结点的时候,发现尾指针指向的是-858993460。。在初始化链表的方法InitList(LinkList *L)中给头结点的next设为NULL,并且通过printf确认过头结点的next确实是0,但到其他方法里,链表头结点的next会变成-858993460,我查了查好像是未初始化,我感觉应该没问题,初始化的链表通过指向指针的指针传回了main(),再传给其他方法不应该没初始化,而且可以正常插入节点,打印节点,只不过最后尾指针确指向-858993460,很奇怪
第二个问题:如果一切正常,执行到最后会报错Run-Time Check Failure #2 - Stack around the variable 'list' was corrupted. 其中list是我的链表变量名,我查了查说是溢出啥的,但如果只进行初始化链表的 方法,其他方法全部注释,还是会报这个错误
逻辑应该是没问题的,但网课上的代码算是伪代码,语法不太严谨,写到C语言里就出现这种问题哭了T—T
```c
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct LNode {
int data;
struct LNode* next;
}LNode,*LinkList;
bool InitList(LinkList *L) {
L = (LNode*)malloc(sizeof(LNode));
LNode* p = L;
if (p == NULL) return false;
p->next = NULL;
if (p->next == NULL) printf("尾结点后是NULL %d\n",p->next);
else printf("尾结点后不是NULL\n");
return true;
}
void ListPrint(LinkList *L) {
LNode* p = L;
while (p) {
p = p->next;
printf("%d ",p->data);
}
}
bool ListInsert(LinkList *L,int index,int e) {
if (index < 1) return false;
LNode* p = L;
int i = 0;
while (p && i < index - 1) {
p = p->next;
i++;
}
if (!p || i > index - 1) return false;
LNode* q = (LNode*)malloc(sizeof(LNode));
if (q == NULL) return false;
q->data = e;
q->next = p->next;
if (p->next == NULL) printf("尾结点后是NULL\n");
else printf("尾结点后是%d\n",p->next);
p->next = q;
return true;
}
int main() {
LinkList list;
if (InitList(&list)) printf("初始化成功!\n");
else printf("初始化失败!\n");
for (int i = 0; i < 2; i++)
{
ListInsert(&list, i + 1, i + 2);
}
ListPrint(&list);
return 0;
}
```