typedef struct
{
uint32_t field_id;
uint16_t length;
}entry_t;
struct node
{
entry_t *sp_entry;
struct node *next;
}*head;
リンクリストにエントリを追加するadd()という関数があります。
void add( entry_t *entry )
{
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
temp->sp_entry = entry;
if (head== NULL)
{
head=temp;
head->next=NULL;
}
else
{
temp->next=head;
head=temp;
}
}
リンクリストノードに格納されている「値」自体が構造体へのポインタであることに注意してください。セグメンテーション違反が発生しています。
temp->sp_entry = entry;
これはおそらく、entry_t構造体の割り当てメモリではないためです。知りたいのは、これが通常のユースケースであるということです。はいの場合、どうすればよいですか。
temp->sp_entry = malloc(sizeof (entry_t));
割り当てを行う前に?また、これを達成するためのよりエレガントな方法はありますか?
追加情報。
gdbを実行すると、
p *temp
$3 = {sp_entry = 0x0, next = 0x3e64656269}
sp_entryはnullポインタのように見えます。これはadd()関数のmallocの後に出力されます。また、私のコードは「-g-O0-Wall」と結合されています。警告はありません。