标题:c++ 指令引用的内存,该内存不能为read ?
只看楼主
xiaoyanghijk
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-8-30
结帖率:0
已结贴  问题点数:20 回复次数:14 
c++ 指令引用的内存,该内存不能为read ?
#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?
请教各位,非常感谢!
搜索更多相关主题的帖子: void 内存 结构体 include 
2012-08-30 22:55
zhuanjia0
Rank: 4
等 级:业余侠客
威 望:3
帖 子:86
专家分:232
注 册:2012-1-13
得分:3 
while(head!=NULL)
{
    test * P1;
    P1=head;
    P1=P1->next;
    delete P1;
}

P1指针可能成为了野指针,在delete P1;后面加上P1=NULL;试试看
收到的鲜花
2012-08-30 23:15
lanriver
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:133
专家分:101
注 册:2008-8-9
得分:3 
看了下楼主的指针操作,头有点晕,或许next指针也要设为NULL,内存上处理肯定有问题。   


[ 本帖最后由 lanriver 于 2012-8-30 23:31 编辑 ]
2012-08-30 23:28
mfs111116
Rank: 2
来 自:山东烟台
等 级:论坛游民
帖 子:28
专家分:38
注 册:2012-8-22
得分:3 
不太懂程序的目的……
2012-08-31 07:56
best_1
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:16
注 册:2012-8-14
得分:3 
感觉一头雾水
收到的鲜花
2012-08-31 14:27
zhangri_123
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2012-8-31
得分:3 
if (P1->name =="lisi")
         P2->next=P1->next;
这句貌似也有点小错误,申请的存放lisi的内存没有释放,如果在大的项目中会造成内存泄露。忘慎重
收到的鲜花
2012-08-31 17:27
zhangri_123
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2012-8-31
得分:0 
还有个问题用的是C中的字符数组可以直接以==或者!=判断字符串相等吗?建议换成strcmp函数或用C++类Cstring,本人也是新手,如有不当希望高手指点
2012-08-31 17:36
scgywx
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2008-3-25
得分:3 
问题1:每次new对像的时候没有初始化next的指针,那么导致最后一个元素的next指针变成了野指针,所以输出到最后一个元素的时候就会报内存越界操作
问题2:C字符串对比不能使用==和!=来判断,需要使用strcmp来判断
收到的鲜花
2012-08-31 18:44
xiaoyanghijk
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-8-30
得分:0 
非常感谢各位的指点!!谢谢!!
2012-09-01 21:47
xiaoyanghijk
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-8-30
得分:0 
非常感谢各位的指点!!谢谢!!
2012-09-01 21:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-380395-1-1.html




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

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