从下面附加的图像中可以看出,添加列表顶部的第二个元素会为 printf 函数创建一个奇怪的行为。
添加列表节点的功能是:
void add_QUEUEnode_top(Item a)
{
if (head==NULL)
{
QUEUEinit(a);
}
else
{
QUEUEput_top(a);
}
return;
}
void QUEUEinit(Item a)
{
head=(link)malloc(sizeof(link*));
head->next=NULL;
head->item=a;
tail=head;
printf("Coda iniziallizata...\n\n");
}
void QUEUEput_top(Item a)
{
link tmp;
tmp=(link)malloc(sizeof(link*));
tmp->item=a;
tmp->next=head;
head=tmp;
return;
}
这里处理项目的功能:
Item fill_item()
{
Item a;
int i;
for(i=0; i<DIM-1; i++)
{
a.stringa[i]=rand();
}
a.stringa[DIM-1]='\0';
a.numero=rand();
printf("\nOggetto generato: \n");
print_item(a);
return a;
}
void print_item(Item a)
{
printf("\nStringa elemento: ");
printf("%s", a.stringa);
printf("\nNumero elemento: %d\n", a.numero);
}
这是我正在编辑的代码块项目的链接。print_item(Item a)
调用“bugged” printf 的函数在模块item.c
中,而生成列表项的函数在list.c
模块中。
知道什么会导致这个问题吗?
PS:我很抱歉位于意大利语的捕获
编辑:项目的定义:
typedef struct
{
char stringa[DIM];
int numero;
} Item;
链接指针的定义:
typedef struct QUEUEnode *link;
链接结构的定义:
struct QUEUEnode
{
Item item;
link next;
};