那个..初学者求教一下...

Emrlay 2012-03-14 01:18:56
刚开始学C++ 求教个问题..

代码如下

#include <iostream>
using namespace std;

struct Node{
int content;
Node *next;
};

bool remove(Node *&h,int &a,int pos)
{
if (pos == 1)
{
Node *p=h;
h=h->next;
a=p->content;
delete p;
p=NULL;
return true;
}
else
{
Node *p=h;
int j=1;
while (j < pos-1)
{
if (p->next == NULL)
break;
p=p->next;
j++;
}
if (p->next != NULL)
{
Node *q=p->next;
p->next=q->next;
a=q->content;
delete q;
q=NULL;
return true;
}
else
{
cout<<"error!"<<endl;
return false;
}
}
}


int main()
{
Node s1,s2,s3,s4,s5;
s1.content=1;
s1.next=&s2;
s2.content=2;
s2.next=&s3;
s3.content=3;
s3.next=&s4;
s4.content=4;
s4.next=&s5;
s5.content=5;
s5.next=NULL;
Node *h=&s1;
int b;

remove(h,b,3);

for (Node *p=h; p != NULL;p=p->next)
cout<<p->content<<endl;
cout<<"The deleted number is "<<b<<endl;
getchar();

return 0;
}

代码在DEV中可以通过,但是VC++ 6.0就出现断言错误,我查了一些资料说是野指针/数组越界..的确将delete语句注释掉之后就可以运行,但不明白是怎么错了 求各位大神解答 小弟多谢了!
...全文
282 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Emrlay 2012-03-14
  • 打赏
  • 举报
回复
谢谢LS!
jixiang1983 2012-03-14
  • 打赏
  • 举报
回复
要想使用delete删除,在创建时应该使用指针:
int main()
{
Node* s1 = new Node;
Node* s2 = new Node;
Node* s3 = new Node;
Node* s4 = new Node;
Node* s5 = new Node;
s1->content = 1;
s1->next = s2;
s2->content = 2;
s2->next = s3;
s3->content = 3;
s3->next = s4;
s4->content = 4;
s4->next = s5;
s5->content = 5;
s5->next = NULL;
Node * h = s1;
int b;

remove(h,b,3);

for (Node *p=h; p != NULL;p=p->next)
cout<<p->content<<endl;
cout<<"The deleted number is "<<b<<endl;
getchar();

return 0;
}

jixiang1983 2012-03-14
  • 打赏
  • 举报
回复
delete总是与new配对使用,只有动态创建(使用new)的数据才能使用delete来删除,LZ的main函数中5个Node型的数据都是直接创建的(使用的是栈内存,数据自动销毁), 不能用delete删除。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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