鱼C论坛

 找回密码
 立即注册
查看: 1938|回复: 8

[已解决]为什么这里会显示异常

[复制链接]
发表于 2023-3-6 20:14:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[i];
                if (NULL == r)
                {
                        r = l = s;
                        i++;
                        continue;
                }
                r->next = s;
                r = s;
                i++;
        }
        r->next = NULL;
}
int main()
{
        int A[10] = { 0,1,2,3,4,5,6,7,8,9 };
        //声明一个不带头节点的单链表
        LinkList l;
        InitList_n(l);
        Establish_n(l, A, 10);


}
最佳答案
2023-3-7 10:18:30
//定义单链表
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));
微信截图_20230306201408.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-6 23:04:19 | 显示全部楼层
本帖最后由 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[i];
                if (NULL == r)
                {
                        r=l = s;

                        i++;
                        continue;
                }
                r->next = s;
                r = s;
                i++;
        }
        r->next = NULL;
}
int main()
{
        int A[10] = { 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刚刚把尾插法看成头插法了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-7 10:18:30 | 显示全部楼层    本楼为最佳答案   
//定义单链表
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));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-7 11:33:41 | 显示全部楼层
jhq999 发表于 2023-3-6 23:04
MMP刚刚把尾插法看成头插法了

所以楼主问的堆损坏是为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-7 11:56:22 | 显示全部楼层
本帖最后由 jhq999 于 2023-3-7 12:07 编辑
微光拼图 发表于 2023-3-7 11:33
所以楼主问的堆损坏是为什么呢?


3楼不是说了吗? ,主要还是我眼瞎了,编译器警告设低了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-7 12:10:35 | 显示全部楼层
cjgank 发表于 2023-3-7 10:18
LNode *s 指针的地址不应该是4字节吧?  那么你强制转换4字节为(LNode *) 可不就造成空间破坏

你或 ...

原来如此,那为什么前两次循环就没有异常呢;还有第18行那里传入的参数 l 不是一个指针吗,那为什么还要用引用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-8 07:02:33 | 显示全部楼层
小丑9 发表于 2023-3-7 12:10
原来如此,那为什么前两次循环就没有异常呢;还有第18行那里传入的参数 l 不是一个指针吗,那为什么还要 ...

不用引用,子函数里的形参l=s;而主函数的实参l不变,不等于第一个s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-8 11:36:04 From FishC Mobile | 显示全部楼层
jhq999 发表于 2023-3-8 07:02
不用引用,子函数里的形参l=s;而主函数的实参l不变,不等于第一个s

那为什么传参的时候是一个数组的时候就可以不用引用呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-8 12:24:55 | 显示全部楼层
本帖最后由 jhq999 于 2023-3-8 12:31 编辑
小丑9 发表于 2023-3-8 11:36
那为什么传参的时候是一个数组的时候就可以不用引用呢?


先搞明白实参不随形参改变而改变;
主函数里的l和子函数里的参数l是两个变量
当叫到子函数时,是把主函数变量l的值赋值给了子函数的参数l,
所以子函数里改变子函数l的值;而主主函数里的l没有改变还是NULL



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表