我有一个工厂自动化应用程序的作业要使用链表完成。由于一个部门的数量和可转移部门的数量可以改变,我决定为struct node *next使用灵活的数组。对于入口部门(i = 0),该程序工作得还算完美,但超出了一点它就会变得疯狂。
我定义的结构节点
struct node{
int data;
struct node *next[];
};
由于我们为必要的变量使用输入文件,因此也定义了这些变量(我的语言是土耳其语):
struct birKay{
int birimNo;
float islemZaman;
int birimIliski;
};
struct urKay{
float gelisZaman;
};
struct birKay birimKayit={0,0.0,0};
struct urKay urunKayit={0.0};
这是应该构建结构的“simulasyon”(模拟)函数,它仍然失败(代码与撰写本文时一样):
system("cls");
int i,j,k,l,birSay,ilis,birIdeal,saySifir;
input = fopen("input.txt","r");
printf("Simulasyon baslatiliyor...\n");
printf("Girdi dosyasi okunuyor...\n");
fscanf(input,"%d",&birSay);
float workTime[birSay];
bool ilisMatris[birSay][birSay];
int ilSayDiz[birSay];
printf("Iliski matrisi cikariliyor...\n");
for(i = 0; i < birSay; i++)
{
ilSayDiz[i] = 0;
printf("%d",ilSayDiz[i]);
for(j = 0; j < birSay; j++)
ilisMatris[i][j] = false;
fscanf(input,"%d %f %d",&birimKayit.birimNo,&workTime[i],&birimKayit.birimIliski);
for(j = 0; j < birimKayit.birimIliski; j++)
{
fscanf(input,"%d",&ilis);
ilisMatris[i][ilis] = true;
ilSayDiz[i]++;
}
printf("%d\n",ilSayDiz[i]);
}
fclose(input);
printf("Fabrika yapisi tanimlaniyor...\n");
struct node *start = NULL;
struct node *new_node, *ptr;
start=yapi_yukle(start,0);
for(i = 0; i < birSay; i++) //sorunlu kısım
{
k = 0;
for(j = 0; j < birSay; j++)
{
if(ilisMatris[i][j] == 1)
{
new_node = (struct node *)malloc(sizeof(struct node));
new_node -> data = j;
ptr = start;
if(i == 0)
{
ptr -> next[k] = new_node;
new_node -> next[k] = NULL;
k++;
}
else
{
for(l = 0; l <= ilSayDiz[i]; l++)
{
if(l == ilSayDiz[i])
if(ptr -> next[k] != NULL)
ptr = ptr -> next[k];
}
}
}
}
}
printf("\nSimulasyon sonlandirildi... ");
printf("Ana menuye donmek icin bir tusa basin...");
getch();
system("cls");
main();
“yapi_yukle”函数:
struct node *yapi_yukle(struct node *start,int num)
{
struct node *new_node, ptr;
new_node = (struct node *)malloc(sizeof(struct node));
new_node -> data = num;
new_node -> next[0] = start;
start = new_node;
return start;
}
我还有其他三个函数(main、inputFileCreator 和 fabrikaOku(读取从输入文件中获取的参数)),它们都可以完美运行。
我真的不知道该怎么办。我尝试了一些东西并且程序变得疯狂(可能来自无限循环或其他东西,但我无法检测到它们)。
我使用 Dev-C++ 5.11 编写 C 代码,任何调试任何代码的尝试都会导致崩溃。
欢迎任何形式的建议。
编辑:对于好奇的人,这里是输入文件的格式(示例,取自家庭作业文档):5 //部门数
0 2.2364 2 1 2 //部门号,工作时间,产品可转入的部门数,产品可转入的部门
1 4.5683 1 3
2 5.9876 2 3 4
3 3.8976 0
4 2.6789 0
20 //这个工厂处理的项目数 0.3504 //这个项目进入工厂的时间
0.9768
1.3085
5.0263
5.1213
5.9992
6.4886
10.4749
11.8744
13.4648
14.2401
14.2904
14.6714
20.7265
26.4457
32.0276
35.0026
36.2470
38.0850
42.1120