注册 登录
编程论坛 C++教室

c++ 指令引用的内存,该内存不能为read ?

xiaoyanghijk 发布于 2012-08-30 22:55, 4080 次点击
#include<iostream.h>
#include<string.h>

struct test{              //定义结构体
    char name[20];
    float score;
    test * next;
};


void main()
{
    char name[20];
    float score;
    test * head=NULL;
    test *  tail=NULL;
    test * Pnew;
   
    Pnew=new test;
    head=Pnew;
    tail=Pnew;
    //输入部分
    while(1){
        cout<<"input name and score"<<endl;
        cin>>name;
        
        if(name[0]=='0')
            break;
        cin >>score;
        strcpy (Pnew->name,name);
        Pnew->score=score;
        Pnew->next=NULL;
        
        Pnew=new test;
        tail->next=Pnew ;
        tail=Pnew;
        
    } // end while
   
    //删除姓名为lisi 的人
    test * P1,*P2;
    P1=head;
   
    while(P1->next!=NULL&& P1-> name!="lisi")
    { P2=P1;    P1=P1->next;}
   
    if (P1->name =="lisi")
        P2->next=P1->next;
   
    else cout<<"can't find"<<endl;        
   
 
//输出部分?
test * pout=head;
 
while(pout!=NULL)
{ cout<<pout->name<<pout->score<<endl;
pout= pout->next;
}


//释放内存空间
while(head!=NULL)
{
    test * P1;
    P1=head;
    P1=P1->next;
    delete P1;
}
 }
定义一个结构体,删除一个叫元素,再输出链表,为什么程序会出现指令引用的内存只能为read?
请教各位,非常感谢!
14 回复
#2
zhuanjia02012-08-30 23:15
while(head!=NULL)
{
    test * P1;
    P1=head;
    P1=P1->next;
    delete P1;
}

P1指针可能成为了野指针,在delete P1;后面加上P1=NULL;试试看
#3
lanriver2012-08-30 23:28
看了下楼主的指针操作,头有点晕,或许next指针也要设为NULL,内存上处理肯定有问题。   


[ 本帖最后由 lanriver 于 2012-8-30 23:31 编辑 ]
#4
mfs1111162012-08-31 07:56
不太懂程序的目的……
#5
best_12012-08-31 14:27
感觉一头雾水
#6
zhangri_1232012-08-31 17:27
if (P1->name =="lisi")
         P2->next=P1->next;
这句貌似也有点小错误,申请的存放lisi的内存没有释放,如果在大的项目中会造成内存泄露。忘慎重
#7
zhangri_1232012-08-31 17:36
还有个问题用的是C中的字符数组可以直接以==或者!=判断字符串相等吗?建议换成strcmp函数或用C++类Cstring,本人也是新手,如有不当希望高手指点
#8
scgywx2012-08-31 18:44
问题1:每次new对像的时候没有初始化next的指针,那么导致最后一个元素的next指针变成了野指针,所以输出到最后一个元素的时候就会报内存越界操作
问题2:C字符串对比不能使用==和!=来判断,需要使用strcmp来判断
#9
xiaoyanghijk2012-09-01 21:47
非常感谢各位的指点!!谢谢!!
#10
xiaoyanghijk2012-09-01 21:56
非常感谢各位的指点!!谢谢!!
#11
xiaoyanghijk2012-09-01 22:00
回复 4楼 mfs111116
给一串数据:删除姓名为"lisi"的学生
#12
xiaoyanghijk2012-09-01 22:06
问题还没解决,我的意思是输入一串姓名和成绩,然后删除姓名为“lisi”的人,再输出删除后的链表。
#13
xiaoyanghijk2012-09-01 22:06
基础不好,有劳大家了
#14
seaghx2012-09-01 22:14
好吧……。
#15
daidai1202013-11-10 14:24
合肥白癜风http://user.qzone.
合肥白癜风医院http://user.qzone.
合肥白癜风专科医院http://user.qzone.
合肥治疗白癜风最好的医院http://user.qzone.

蚌埠白癜风http://user.qzone.
蚌埠白癜风医院http://user.qzone.
蚌埠白癜风专科医院http://user.qzone.
蚌埠治疗白癜风最好的医院http://user.qzone.

安徽白癜风http://user.qzone.
安徽白癜风医院http://user.qzone.
安徽白癜风专科医院http://user.qzone.
安徽治疗白癜风最好的医院http://user.qzone.
-----------------------------------------------------------------------------------------------------
芜湖白癜风http://user.qzone.
芜湖白癜风医院http://user.qzone.
芜湖白癜风专科医院http://user.qzone.
芜湖治疗白癜风最好的医院http://user.qzone.

温州白癜风http://user.qzone.
温州白癜风医院http://user.qzone.
温州白癜风专科医院http://user.qzone.
温州治疗白癜风最好的医院http://user.qzone.

南京哪里治疗白癜风最好http://user.qzone.
1