[C++]指针被莫名其妙修改了……

2013-09-29 22:05:11 +08:00
 KickTR
先别急着吐槽下面这段代码有多烂_(:з」∠)_(因为老师教的时候就有问题我还傻愣愣地按照老师的那套思路去做)
在学校机房的VC++6上调试会有问题,自己的Ubuntu上eclipse调试也是同样的问题:指针被莫名其妙修改了。

主要就是输入数字模拟抽取手牌的过程,手上如果有相同的牌就把手上的牌扔掉,没有的话就按从小到大排序好。

#include <iostream>
#include <malloc.h>
using namespace std;

typedef struct card
{
int data;
struct card *next;
} aCard, *list;
——————下面可以忽略(应该没问题吧?)——————
int insertc(list handcard)
{
aCard inputcard;
list p;
cin>>inputcard.data;
inputcard.next=NULL;
p=handcard;
//check first card
if (handcard->next==NULL)
{
cout<<"1st card"<<endl;
handcard->next=&inputcard;
return 0;
}
while(p->next->data<inputcard.data && p->next!=NULL)
{
p=p->next;
}

//add card at the end
if (p->next->next==NULL)
{
p->next->next=handcard;
return 0;
}

//delete card;
if (p->next->data==inputcard.data)
{
list q;
q=p->next;
p->next=p->next->next;
free(q);
cout<<"free a card"<<endl;
return 0;
}

//insertcard
if (p->next->data<inputcard.data)
{
inputcard.next=p->next->next;
p->next->next=&inputcard;
}
return 0;
}

list createlist()
{
list Clist;
Clist=(card*)malloc(sizeof(card));
Clist->data=0;
Clist->next=NULL;
return Clist;
}
——————上面可以忽略——————
int main()
{
list handcard,p;
handcard=createlist();
p=handcard;
for (int i=0;i<5;i++)
{
insertc(handcard);
while (p->next)
{
//重点在这里
//一旦执行了下面任何一句话都会使得后一句指针p的指向内容以及next被修改掉,使得p=p->next这句毫无意义并且废掉了p
//本意是为了抓取一次新牌后就打印一次手里的所有牌,结果发现指针莫名其妙被修改
//因为*p和*handcard指向相同空间所以handcard里面的内容也会被改掉
//————问题代码——————
//printf("1234");
//cout<<p->data<<" "<<endl;
//cout<<"anything"<<endl;
//————(end)————
p=p->next; //单独执行这句就不会有问题,不过一旦while结束后继续执行后面的代码指针p指向内容也会瞬间乱掉
}
cout<<endl;
}
return 0;
}

为什么随便打印点东西都会让p指向混乱呢?试着单步跟每次都是跟到while开始下一句执行时p就乱了。
另外,其实main函数是有点问题的还没完全调试好,不能正确连续打印手牌,不过和上面所述问题无关,我只想知道为什么执行一下输出都会扰乱指针p的内容
相当纠结,本人水平很弱,特此处女贴来求助……
4770 次点击
所在节点    程序员
21 条回复
kelvin_fly
2013-10-01 09:36:37 +08:00
@KickTR 释放掉不代表清零,也不会清零。 请查询free的具体意义。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/84183

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX