0xC0000005: 读取位置 0xbaadf02d 时发生访问冲突

wangjun0402 2008-05-04 09:12:00
bool mylist::getpos(int i,myvalue &x)
{
if(i>length||i<=0)
{
cout<<"error getpos!"<<endl;
return false;
}
else
{
node *p=new node;
p=head->next;
for(int j=1;j<i;j++)
p=p->next;
x=p->value ;
delete p;
cout<<"success getpos"<<endl;
return true;
}
}
我在vs2005的vc++中,一执行到x=p-〉value这句,就中断,找不到解决方法。
...全文
570 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrace 2008-05-04
  • 打赏
  • 举报
回复
node *p=new node;
p=head->next;

/*
嗯?
是不是应该
node *p = new node;
p->next = head
*/
rushman 2008-05-04
  • 打赏
  • 举报
回复
貌似程序逻辑有问题啊
bool mylist::getpos(int i,myvalue &x)
{
if(i>length || i <=0)
{
cout <<"error getpos!" < <endl;
return false;
}
else
{
node *p=new node; // 刚分配的内存
p=head->next; // 马上就丢掉了?!!

for(int j=1;j <i;j++) // 这里飞雪已经说了
// 另一个问题,虽然不知道你的 length 和 i 的具体含义,
// 但这里的循环条件应该还是有问题。
// 如果 length 为 1,那 i 的有效值又会是多少?j 从 1 到 i - 1 能找到目标节点吗?
p=p->next; // 另外,如果你的程序逻辑正确,依靠 length 不判断 p 也可以,
// 但很明显,你的程序还存在其它的问题

x=p->value ;
delete p; // 那这里又 delete 的是什么?!!
cout < <"success getpos" < <endl;
return true;
}
}
baihacker 2008-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangjun0402 的回复:]
还是不行~~~~
[/Quote]

早上代码早解决
扭扭捏捏慢慢吹
frank_323 2008-05-04
  • 打赏
  • 举报
回复
跟踪一下p的值
wangjun0402 2008-05-04
  • 打赏
  • 举报
回复
还是不行~~~~
baihacker 2008-05-04
  • 打赏
  • 举报
回复
在只有head节点的时候length应该是0,
在有一个节点的时候p首先指向第一个节点(head->next),i=1时循环零次,然后访问value,没有问题
wangjun0402 2008-05-04
  • 打赏
  • 举报
回复
node *p=head->next;
for(int j=1;j <i;j++)
p=p->next;
x=p->value ;
cout <<"success getpos" <<endl;
改成以上了,可还是在x=p-〉value处中断,请大家再帮忙看看,谢谢。
baihacker 2008-05-04
  • 打赏
  • 举报
回复
可能和你的length有关,你的length包含head否?

node *p=head; 
while(i--) p=p->next;
x=p->value ;
cout <<"success getpos" <<endl;
zsxcn 2008-05-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 baihacker 的回复:]
C/C++ code//刚才没有看清楚,应该是这样node*p=head->next;for(intj=1;j<i;j++)
p=p->next;
x=p->value ;
cout<<"success getpos"<<endl;
[/Quote]
不明白为什么把delete p去掉啊,p不是已经没有用处了么
baihacker 2008-05-04
  • 打赏
  • 举报
回复

//刚才没有看清楚,应该是这样
node *p=head->next;
for(int j=1;j <i;j++)
p=p->next;
x=p->value ;
cout <<"success getpos" <<endl;
晨星 2008-05-04
  • 打赏
  • 举报
回复
node *p=new node;
p=head->next;
——怎么刚申请的空间就直接丢弃了?
zsxcn 2008-05-04
  • 打赏
  • 举报
回复
第一个if不是已经判断过有多少个node了么?怎么p还会是null
baihacker 2008-05-04
  • 打赏
  • 举报
回复
for(int j=1;p&&j <i;j++) //加一个p&&,不然就会出问题
p=p->next;

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧