中易网

C++里建立链表出现无限循环,自己调试一下,觉得问题在Showdata()这个函数里,但是我真的弄不明白

答案:2  悬赏:30  
解决时间 2021-03-01 05:38
C++里建立链表出现无限循环,自己调试一下,觉得问题在Showdata()这个函数里,但是我真的弄不明白,调试的时候,指针h的值和h->next的值是相等的,所以一直在无限循环,它们的值为什么会相等啊!非常感谢大神详细的指导,谢谢!!
#include
using namespace std;

typedef struct datatpye
{
int num;
struct datatpye *next;
}DA;

void InitData(DA &h1, DA &h2); //初始化两个链表
void ShowData(DA &head); //显示一个线标里的数据

int main()
{
DA head1, head2;
InitData(head1,head2);
ShowData(head1);

return 0;
}

void InitData(DA & h1, DA & h2)
{
DA m1,m2,m3;
DA n1,n2,n3,n4;
m3.next = NULL; m3.num = 7;
m2.next = &m3; m2.num = 5;
m1.next = &m2; m1.num = 1;
h1.next = &m1;

n4.next = NULL; n4.num = 19;
n3.next = &n4; n3.num = 11;
n2.next = &n3; n2.num = 6;
n1.next = &n2; n1.num = 0;
h2.next = &n1;
}

void ShowData(DA & head)
{
DA *h = head.next;
while(h)
{
cout<num<<"->";
h = h->next;
}
cout<<"\b\b\n"<}
最佳答案
你这问题是经典的不了解函数局部变量储存的错误
你应该new一个,new的话实在堆里分配内存,局部变量实在栈里分配内存,也就是局部变量的内存在函数返回时就释放了,你居然使用了已经释放的内存,也就是野指针。
这是一件非常危险的事。。。。。。。结果是无法预料的
InitData里所有局部变量都应该改成new出的动态变量

ShowData这种只是输出的怎么可能导致错误
全部回答
源码 再看看别人怎么说的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求魁拔3 1080P超清蓝光电影BD,要种子,几十
2015七月份买二手车便宜吗?七月初就会降价吗
湖南警察学院怎么样
假如有一架飞机从南机起飞沿某一经线圈绕地球
如果一家网络游戏公司有60多台服务器,十个人
玛窦福音和路加福音中基督的族谱为什么不一样
我的世界手机版启动器为什么老是闪退
科鲁兹停车熄火后,车底盘后半部分(应该是油
佛山市顺德区容桂满年红电器厂怎么去啊,有知
商业银行承兑汇票如何兑现
五百罗汉第七拾壹和第贰佰七拾捌尊 解签
英才家教中心(开封尉氏县)地址在什么地方,我
若直线x/a+y/b=1于圆x^2+y^2=1有公共点,则
我男朋友说结婚看我表现,我该怎么办
富阳静音滑动门怎么去啊,有知道地址的么
推荐资讯
黄河道/渤海十八路(路口)地址在哪,我要去那
双系统在系统选择界面如何进入bios
用煤气罐装醇基燃油可以么
我是在美发店上班的,打胎休息一个星期后可以
济南 万达附近和洪楼附近有什么好点的礼品店
笔记本电脑安装N卡驱动出现,此图形驱动程序
常州高压电力设备厂在什么地方啊,我要过去处
金源商务宾馆我想知道这个在什么地方
吉林市第五十七中学地址好找么,我有些事要过
我的QQ为什么不能捕捉屏幕拜托了各位 谢谢
全网通手机卖场下原店在什么地方啊,我要过去
老公无精,怎么申请供精人,人工授精和试管婴
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?