刚开始学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语句注释掉之后就可以运行,但不明白是怎么错了 求各位大神解答 小弟多谢了!

解决方案 »

  1.   

    delete总是与new配对使用,只有动态创建(使用new)的数据才能使用delete来删除,LZ的main函数中5个Node型的数据都是直接创建的(使用的是栈内存,数据自动销毁), 不能用delete删除。
      

  2.   

    要想使用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;
    }