为什么出现m=1之后运行会出错
本帖最后由 剑客夜帝 于 2015-6-26 15:06 编辑#include<stdio.h>
#include<stdlib.h>
int i=1;
typedef struct Node
{
int data;
struct Node *next;
}node;
node *create()
{
node *head=NULL,*p;
head=(node *)malloc(sizeof(node));
p=head;
printf("请输入每个人手里的数字,如果小于1,那么结束输入,那个人不作数。\n");
printf("请输入第%d个人手里的数字:",i);
scanf("%d",&p->data);
node *s,*p1;
while(p->data > 0)
{
s=(node *)malloc(sizeof(node));
printf("请输入第%d个人手里的数字:",(++i));
scanf("%d",&s->data);
p->next=s;
p1=p;
p=s;
}
p1->next=head;
return (head);
}
int main()
{
int j;
int m;
node *temp;
node *p=create();
printf("开始人选一个正整数作为第一次报数上限:");
scanf("%d",&m);
while(p != p->next)
{
if(m == 1)
{
printf("%d->",p->data);
temp=p;
m=temp->data;
p=p->next;
free(temp);
}
else
{
for(j=1;j<m-1;j++)
p=p->next;
printf("%d->",p->next->data);
temp=p->next;
p->next=temp->next;
m=temp->data;
free(temp);
p=p->next;
}
}
printf("%d\n",p->data);
return 0;
} free(temp);这句有点问题,你temp没有通过malloc在堆中分配内存,你free它应该会当掉程序 liveloo 发表于 2015-7-2 22:33
free(temp);这句有点问题,你temp没有通过malloc在堆中分配内存,你free它应该会当掉程序
但是如果输入的数据没有1就不会出现问题,这是什么原因?
输入的数据没有1就不会进入if(m==1)语句,进入的是else语句 总感觉你的内存分配有问题,光分配,不释放,malloc了谁,应该free谁,你的没对应上,可能在else中,刚好temp指向的地址等于malloc的地址,虽然不出错,但是这种情况不推荐 liveloo 发表于 2015-7-13 21:43
输入的数据没有1就不会进入if(m==1)语句,进入的是else语句
如果把P释放了会出错 head=(node *)malloc(sizeof(node));
要对应释放head
liveloo 发表于 2015-7-15 16:43
head=(node *)malloc(sizeof(node));
要对应释放head
把head释放了,那么第一个数据不是就没有了,能不能帮我改一下,我就是实现小甲鱼讲约瑟夫问题时布置的课后作业,看他们出列的顺序
页:
[1]