【发布时间】:2015-05-08 23:56:19
【问题描述】:
我有一个带有结构和插入/打印函数的链表,如下所示,
typedef struct node{
int size;
int day;
int year;
char* month;
char* fileName;
struct node *next;
}node;
void insert(node ** head, int size, int year, int day, char* month, char* fileName){
node * newNode = (node*)malloc(sizeof(node));
newNode->size = size;
newNode->fileName = fileName;
newNode->day = day;
newNode->month = month;
newNode->year = year;
newNode->next = *head;
*head = newNode;
puts("insert called");
//printf("head is %s\n", newNode->fileName);
}
void print_list(node * head) {
node * current = head;
while (current != NULL){
puts("got here");
printf("head %s\n", current->fileName);
current = current->next;
printf("next filename %s\n", current->fileName);
}
}
当我调用插入函数时,它会按照我调用该函数的次数打印“插入调用”消息。所以我的猜测是插入函数不是问题。
我的问题是在 print 函数打印列表中的前几个节点后我得到一个 Segfault(前两个节点工作正常!)
这是调用插入函数的其余代码, 我不认为这是她的问题,但我可能弄错了:
所有对链表函数的调用都在底部
void p5aFlag(char* pathName){
DIR* d;
struct dirent *dir;
struct stat s;
struct tm *tp;
char* fileName;
char temp2[strlen(pathName)];
char * month;
time_t t;
d = opendir(pathName);
int year;
int day;
int size;
node *head = NULL;
int flag = 0;
if(d){ //While there are more files in the directory, keep reading them off
while ((dir = readdir(d)) != NULL){
fileName = dir->d_name; //store the name of the directory that was just read in fileName
strcpy(temp2,pathName); // copy the directory name into temp2
if(strcmp(fileName, ".") != 0 && strcmp(fileName, "..") != 0){ // get file info if the file isn't "." or ".."
strncat(temp2,"/",2); // prepare the path to lead to another file
strncat(temp2, fileName, 15); // append the fileName to the path, now we can open this file
if(stat(temp2, &s) == -1 ){ // if we cannot get information for this file, print error message and exit
fprintf(stderr, "couldnt get file info for %s\n", fileName);
}
t = s.st_mtime; //store the time that the file was last modified in t
tp = localtime(&t); // convert to local time
switch(tp->tm_mon){ // switch to change months from [0-11] to [Jan-Dec]
case 0:
month = "Jan";
break;
case 1:
month = "Feb";
break;
case 2:
month = "Mar";
break;
case 3:
month = "Apr";
break;
case 4:
month = "May";
break;
case 5:
month = "Jun";
break;
case 6:
month = "Jul";
break;
case 7:
month = "Aug";
break;
case 8:
month = "Sep";
break;
case 9:
month = "Oct";
break;
case 10:
month = "Nov";
break;
case 11:
month = "Dec";
break;
default:
break;
}
flag = 1;
}
if(flag == 1){
year = 1900 + tp->tm_year;
size = s.st_size;
day = tp->tm_mday;
insert(&head, size, year, day, month, fileName);
flag = 0;
}
temp2[0]= '\0';
flag = 0;
}
//search(head, ".emacs");
print_list(head);
closedir(d); // close the directory
}
}
我不确定为什么会这样。任何帮助将不胜感激。
【问题讨论】:
标签: c struct linked-list