以下に添付された画像からわかるように、リストの一番上から 2 番目の要素を追加すると、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)
「バグのある」printf を呼び出す関数はモジュール内にありますitem.c
が、リスト項目を生成する関数はlist.c
モジュール内にあります。
この問題の原因は何ですか?
PS: イタリア語のキャプチャで申し訳ありません
編集: 項目の定義:
typedef struct
{
char stringa[DIM];
int numero;
} Item;
リンク ポインターの定義:
typedef struct QUEUEnode *link;
リンク構造の定義:
struct QUEUEnode
{
Item item;
link next;
};