リンクリストを印刷する小さなプログラムを書いています。このリストには、文字列と次のノードへのポインタが含まれています。
リンクリストを、新しいノードを追加してデータフィールドに入力する関数に渡します。
main関数に戻ってリストの内容を印刷しようとすると、セグメンテーション違反エラーが発生しますが、関数add_nodeからノードの内容を印刷できます。
リストと文字列を関数に渡せるようにしたいのですが、関数は渡した文字列を使用して新しいノードをリストに追加する必要があります。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char filename[25];
struct node *next;
};
typedef struct node LISTNODE;
typedef LISTNODE *LISTNODEPTR;
void add_node(LISTNODEPTR *nFile, char *chaData);
int main (int argc, char *argv[])
{
LISTNODEPTR nFile = NULL;
printf("Printing list\n");
add_node(&nFile, "file.txt");
printf("%s\n", nFile->filename);
free(nFile);
return 0;
}
void add_node(LISTNODEPTR *nFile, char *chaData)
{
LISTNODEPTR head = *nFile;
LISTNODEPTR newNode;
newNode = (LISTNODEPTR) malloc(sizeof (struct node));
strcpy(newNode->filename, chaData);
printf("%s\n", newNode->filename);
newNode->next = head; //link next. newNode next points to head (beginning of the list). At this time (head & newNode)->2nd->3rd->NULL
head = newNode;
}
出力:印刷リストfile.txtセグメンテーション違反
OS:Linux sisdvb02 2.6.35-28-サーバー#49-UbuntuSMP火3月1日14:55:37UTC 2011 x86_64 GNU / Linux
コンパイラ:gcc -Wall -o list list.c