为什么这里会显示异常
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
//定义单链表
typedef struct LNode{
ElemType data;
LNode* next;
}LNode ,*LinkList;
//初始化不带头节点的单链表
void InitList_n(LinkList &l)
{
l = NULL;
}
//尾插法建立不带头节点的单链表
void Establish_n(LinkList l,ElemType A[],int len)
{
int i = 0;
LNode* r = l, * s;
while (i < len - 1)
{
s = (LNode*)malloc(sizeof(ElemType));
s->data = A;
if (NULL == r)
{
r = l = s;
i++;
continue;
}
r->next = s;
r = s;
i++;
}
r->next = NULL;
}
int main()
{
int A = { 0,1,2,3,4,5,6,7,8,9 };
//声明一个不带头节点的单链表
LinkList l;
InitList_n(l);
Establish_n(l, A, 10);
}
本帖最后由 jhq999 于 2023-3-6 23:10 编辑
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
//定义单链表
typedef struct LNode{
ElemType data;
LNode* next;
}LNode ,*LinkList;
//初始化不带头节点的单链表
void InitList_n(LinkList &l)
{
l = NULL;
}
//尾插法建立不带头节点的单链表
void Establish_n(LinkList &l,ElemType A[],int len)//////////&l
{
int i = 0;
LNode* r=l,* s;
while (i < len - 1)
{
s = (LNode*)malloc(sizeof(ElemType));
s->data = A;
if (NULL == r)
{
r=l = s;
i++;
continue;
}
r->next = s;
r = s;
i++;
}
r->next = NULL;
}
int main()
{
int A = { 0,1,2,3,4,5,6,7,8,9 };
//声明一个不带头节点的单链表
LinkList l;
InitList_n(l);
Establish_n(l, A, 10);
LinkList p=l;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
MMP刚刚把尾插法看成头插法了
//定义单链表
typedef struct LNode{
ElemType data;
LNode* next;
}LNode ,*LinkList;
LNode* r = l, * s;
s = (LNode*)malloc(sizeof(ElemType));
LNode *s 指针的地址不应该是4字节吧?那么你强制转换4字节为(LNode *) 可不就造成空间破坏
你或许应该这样做:
s = (LNode*)malloc(sizeof(LNode));
jhq999 发表于 2023-3-6 23:04
MMP刚刚把尾插法看成头插法了
所以楼主问的堆损坏是为什么呢? 本帖最后由 jhq999 于 2023-3-7 12:07 编辑
微光拼图 发表于 2023-3-7 11:33
所以楼主问的堆损坏是为什么呢?
3楼不是说了吗?{:5_109:} ,主要还是我眼瞎了,编译器警告设低了 cjgank 发表于 2023-3-7 10:18
LNode *s 指针的地址不应该是4字节吧?那么你强制转换4字节为(LNode *) 可不就造成空间破坏
你或 ...
原来如此,那为什么前两次循环就没有异常呢;还有第18行那里传入的参数 l 不是一个指针吗,那为什么还要用引用? 小丑9 发表于 2023-3-7 12:10
原来如此,那为什么前两次循环就没有异常呢;还有第18行那里传入的参数 l 不是一个指针吗,那为什么还要 ...
不用引用,子函数里的形参l=s;而主函数的实参l不变,不等于第一个s jhq999 发表于 2023-3-8 07:02
不用引用,子函数里的形参l=s;而主函数的实参l不变,不等于第一个s
那为什么传参的时候是一个数组的时候就可以不用引用呢? 本帖最后由 jhq999 于 2023-3-8 12:31 编辑
小丑9 发表于 2023-3-8 11:36
那为什么传参的时候是一个数组的时候就可以不用引用呢?
先搞明白实参不随形参改变而改变;
主函数里的l和子函数里的参数l是两个变量
当叫到子函数时,是把主函数变量l的值赋值给了子函数的参数l,
所以子函数里改变子函数l的值;而主主函数里的l没有改变还是NULL
页:
[1]