我正在为我的单人练习编码,目前我们正在学习C中的队列。这个练习是关于用列表实现的队列。
typedef struct cvor{ //elements of a list
double broj; //number
struct cvor *sljed; //pointer to next element
}cvor;
typedef struct red{ //queue realised with a list
cvor *ulaz; //enter pointer
cvor *izlaz; //exit pointer
}red;
我有两个功能。初始化队列并将元素添加到队列:
void init_red(red *red);
int dodaj_u_red(double broj, red *red);
在我的main函数中,我首先将变量red初始化为指针,因为我的程序根本不起作用。我调试了它,当它达到init_red(红色)时它崩溃了。如果队列是一个指针,我无法解释为什么代码不起作用。
void init_red(red *red){
red->ulaz = NULL;
red->izlaz = NULL;
}
int dodaj_u_red(double broj, red *red){
cvor *novi; //novi means new
if( (novi = malloc(sizeof(cvor)))){ //checking for error
novi->broj = broj;
novi->sljed = NULL;
if(red->izlaz == NULL) red->izlaz = novi;
else (red->ulaz)->sljed = novi;
red->ulaz = novi;
return 1;
}
return 0;
}
主要功能是
int main(void){
red red; //if I change this is *red and I change argument parameters
double broj; //from &red to red the program doesn't work
int n, i;
printf("Upisite koliko brojeva zelite dodati u listu: ");
do{
scanf("%d", &n);
if(n > 10 || n < 0){
printf("Pogresna velicina broja. Broj mora biti izmedu 1 i 10.");
}
}while(n > 10 || n < 0);
init_red(&red);
for( i = 0; i < n; i++){
printf("Upisi %d clan: ", i+1);
scanf("%lf", &broj);
if( !(dodaj_u_red(broj, &red))) return 1;
printf("Novi clan je: %lf.\n", (red.ulaz)->broj);
}
return 0;
}
不起作用的主要功能的版本。 (到达init_red(红色)时会崩溃;行)
int main(void){
red *red;
double broj;
int n, i;
printf("Upisite koliko brojeva zelite dodati u listu: ");
do{
scanf("%d", &n);
if(n > 10 || n < 0){
printf("Pogresna velicina broja. Broj mora biti izmedu 1 i 10.");
}
}while(n > 10 || n < 0);
init_red(red);
for( i = 0; i < n; i++){
printf("Upisi %d clan: ", i+1);
scanf("%lf", &broj);
if( !(dodaj_u_red(broj, red))) return 1;
printf("Novi clan je: %lf.\n", (red.ulaz)->broj);
}
return 0;
}
答案 0 :(得分:1)
你没有为* red分配任何内存 将该行更改为
red *red = (red*)malloc(sizeof(red));