| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
问题如下: 
我写的这个创建循环链表的函数,在最后main函数中生成 *P的时候 *p的地址就飘了 
我很想知道这是为什么,我感觉在逻辑上我这样写循环列表创建函数应该没有问题, 
本人指针,地址这一块还比较差,希望有大佬可以指点一下迷津 
代码如下: 
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 
 
//约瑟夫环进阶版 
//每个结点的结构 
typedef struct Node 
{ 
        int data;//每个参与者的序号 
        int code;//每个参与者的密码 
        struct Node* NEXT; 
}Node; 
 
//创建一个循环链表 
Node *Man_Create(int p_number,int r_number) 
{ 
        //产生随机种子 
        srand(time(NULL)); 
        Node *p = NULL, *head=NULL; 
        head = (Node*)malloc(sizeof(Node)); 
        head->data = 1; 
        head->code = r_number; 
        if (!head) 
        { 
                exit(0); 
        } 
 
        p = head; 
        printf("\n生成的循环列表如下:\n"); 
        printf("第%d个结点的密码是:\t%d\n",head->data,head->code); 
        for (int i = 1; i < p_number; i++) 
        { 
                p = p->NEXT; 
                p = (Node*)malloc(sizeof(Node)); 
                if (!p) 
                { 
                        exit(0); 
                } 
                p->data = i + 1; 
                p->code = rand() % r_number + 1; 
                printf("第%d个结点的密码是:\t%d\n",p->data,p->code); 
        } 
        p->NEXT = head; 
        printf("循环链表创建成功!\n"); 
 
        return head; 
} 
 
int main() 
{ 
        //确定循环列表中结点的个数 
        int man_number=0; 
        printf("请输入人的个数:"); 
        scanf("%d",&man_number); 
        //创建一个报数的上限值 
        int report_number = 0; 
        printf("请输入报数的上限值:"); 
        scanf("%d",&report_number); 
        //创建一个循环列表 
        Node *p = Man_Create(man_number, report_number); 
        //解决约瑟夫环问题 
        Node *temp = NULL; 
        int m = man_number; 
        while (p != p->NEXT) 
        { 
                for (int i = 1; i < p->code%m; i++)//调试的时候问题出现在这个地方,p的地址完全飘了找不到对应的p->code和p->data 
                { 
                        p = p->NEXT; 
                } 
                temp = p->NEXT; 
                printf("%d->", temp->data); 
                p->NEXT = temp->NEXT; 
                free(temp); 
        } 
        printf("%d\n", p->data); 
        printf("输出完成,约瑟夫环测试版成功!!!"); 
 
        system("pause"); 
        return EXIT_SUCCESS; 
} |   
 
 
 
 |