| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 452 人关注过本帖
标题:非法操作的问题何在?
只看楼主 加入收藏
CNick
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-5-16
收藏
 问题点数:0 回复次数:2 
非法操作的问题何在?

#include<iostream.h>
struct node
{
int music[10];
char name[10];
int i;
node *next;
};

class LinkList
{
public:
LinkList()
{
first=NULL;
n=0;
}
void Insert(int pos,const &x);
void Setup();
void Display();
int length()
{
return n;
}
node* SetPos(int pos);
protected:
node *first;
int n;
};

node* LinkList::SetPos(int pos)
{
node *q=first;
for(int i=0;i<pos;i++)
q=q->next;
return q;
}

void LinkList::Setup()
{
node *q,*p;
node m1={{1,2,3,4,5},"小蜜蜂",1};
q=new node;
q=&m1;
q->next=first;
first=q;
node m2={{5,4,3,2,1},"遇见",2};
p=new node;
p=&m2;
p->next=q->next;
q->next=p;
n+=2;
}

void LinkList::Display()
{
node *m=first->next;
cout<<"歌曲库显示\n";
for(int a=1;a<=n;a++)
{
cout<<a<<'.'<<m->name<<endl;
m=m->next;
}
}
void main()
{
LinkList nick;
nick.Setup();
nick.Display();
}

提示非法..请指教.....

搜索更多相关主题的帖子: include public music return 
2006-07-01 11:24
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
void LinkList::Setup()
{
node *q,*p;
node m1={{1,2,3,4,5},"小蜜蜂",1};//局部数据
q=new node;
q=&m1;//申请完空间没有用
q->next=first;
first=q;
node m2={{5,4,3,2,1},"遇见",2};
p=new node;
p=&m2;//类似
p->next=q->next;
q->next=p;
n+=2;
}
void LinkList::Display()
{
node *m=first->next;//f->next为空
cout<<"歌曲库显示\n";
for(int a=1;a<=n;a++)
{
cout<<a<<'.'<<m->name<<endl;
m=m->next;
}
}


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-03 10:46
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
song4 说的对。
我先前还没看到,好失败
这里
node m1={{1,2,3,4,5},"小蜜蜂",1};
q=new node;
q=&m1;
q->next=first;
first=q;

m1的地址复值给q,然后又把这个局部变量的地址给first这是错误的,函数结束后,这个栈中的数据都会被销毁,那些曾经存放过的东西都不存在,你可以这样改下:
void LinkList::Setup()
{
node *q,*p;
node m1={{1,2,3,4,5},"小蜜蜂",1,NULL};
q=new node;
strcpy(q->name,m1.name);
q->next=m1.next;
q->next=first;
first=q;
node m2={{5,4,3,2,1},"遇见",2,NULL};
p=new node;
strcpy(p->name,m2.name);
p->next=m2.next;
p->next=q->next;
q->next=p;
n+=2;
}
这样只是复值,而不是取地址,这样就不会出现上述错误

[此贴子已经被作者于2006-7-3 13:49:11编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-03 13:46
快速回复:非法操作的问题何在?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012450 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved