|
/*
* =====================================================================================
*
* Filename: main.c
*
* Description: 局部扭立方体的高容错路由算法
*
* Version: 1.0
* Created: 2009-3-5 12:43:14
* Revision: none
* Compiler: gcc
*
* Author:
* Mail :
* Company:
*
* =====================================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
* 定义点的结构体
* 每个点可以用一个十进制数来表示,转化成二进制数以后第n位的数字状态则表示
* 这个点处于n-1维局部扭立方体的时候所处于哪个立方体
*/
struct point
{
/*
* 定义一个变量用来存储一个点的相邻的所有的点是否有故障
* 用一个n位的二进制数来表示,右起第m位则表示当这个点处于m-1维立方体中时,与它相对应的m-1维立方体的对应点的状态
* 0表示有故障,1表示没有故障
* 初始化的值均为无故障点
*/
unsigned neighbours_status;
/*
* 标识这个点本身是否是故障点
* 字符'0'代表有故障,'1'代表无故障
*/
char trouble_status;
};
/*
* 用一个函数来确定局部扭立方体的维数
*/
unsigned get_demension(void)
{
unsigned demension;
printf("lease input the demension(unsigned) of the LFQ:");
scanf("%u", &demension);
return demension;
}
/*
* 初始化所有的顶点
*/
void init_points(unsigned demension, struct point *points)
{
unsigned loop = 0;
for(loop; loop < (1 << demension); loop++)
{
points[loop].trouble_status = '1';
points[loop].neighbours_status = (1 << demension) - 1;
/*
* 初始化的同时打印出所有的点
*/
printf("points[%d].neighbours_status = %u ", loop, points[loop].neighbours_status);
printf("points[%d].trouble_status = %c\n", loop, points[loop].trouble_status);
}
}
/*
* start--end范围内的随机数产生函数
*/
unsigned random_produce(unsigned start, unsigned end)
{
unsigned result;
time_t seed_time;
time(&seed_time);
srand((unsigned) seed_time);
result = rand() % (end - start + 1) + start;
return result;
}
int main(int *argc, char **argv)
{
struct point *points = NULL;
unsigned demension = 0; /* 局部扭立方体的维数 */
unsigned *trouble_points_tmp = NULL; /* 用来标记临时的故障点的数组 */
unsigned max_trouble_points = 0; /* 故障点的最大数目 */
unsigned loop = 0;
unsigned i = 0;
/*
* 获得局部扭立方体的维数
*/
demension = get_demension();
printf("demension is %u\n", demension);
/*
* 允许产生的最多故障点的个数
*/
max_trouble_points = 2 * demension - 3;
/*
* 为顶点申请空间
*/
points = (struct point *)malloc( (1 << demension - 1) * sizeof(struct point) );
/*
* 初始化顶点
*/
init_points(demension, points);
//测试随机函数
i = random_produce(1, 10);
printf("guzhangdiandgeshushi: %u\n", i);
/*
* 为最大故障点申请空间
*/
printf("haha\n");
if(max_trouble_points > 0)
{
trouble_points_tmp = (unsigned *)malloc(max_trouble_points * sizeof(unsigned));
/*
* 初始化临时保存故障点的数组
*/
for (loop = 0; loop < max_trouble_points; loop++)
{
trouble_points_tmp[loop] = 0;
printf("trouble_points_tmp[%u] is %u\n", loop, trouble_points_tmp[loop]);
}
}
printf("hehe\n");
/*
* 这里有问题,初始化以后原来顶点里面的状态不知道为什么发生改变了
* 跟踪了老半天没跟踪出是什么问题出来
*/
printf("初始化故障空间后观察所有顶点:\n");
for (i = 0; i < (1 << demension); i++)
{
printf("points[%u].neighbours_status is %u\n", i, points.neighbours_status);
}
printf("观察结束\n");
//free(&points);
//free(&trouble_points_tmp);
return 0;
}
当有了/*
* 为最大故障点申请空间
*/
printf("haha\n");
if(max_trouble_points > 0)
{
trouble_points_tmp = (unsigned *)malloc(max_trouble_points * sizeof(unsigned));
/*
* 初始化临时保存故障点的数组
*/
for (loop = 0; loop < max_trouble_points; loop++)
{
trouble_points_tmp[loop] = 0;
printf("trouble_points_tmp[%u] is %u\n", loop, trouble_points_tmp[loop]);
}
}
这段代码以后,原来的顶点里面的有几个顶点的neighbours_status值发生了改变,并且当我输入demension的值为0的时候,出现了Segmentation fault。调试了半天硬是没找出原因,麻烦大家帮我看一下 |
|