[英]How to add a structure to a linked list? in C
我正在嘗試將一個框架添加到此類結構的鏈表中,但不是每次都向列表中添加一個新結構,程序沒有添加任何內容,誰能告訴我問題是什么? 或者給我一個更好的鍛煉方法?
結構:
typedef struct Frame
{
char* name;
int duration;
char* path;
} Frame;
// Link (node) struct
typedef struct FrameNode
{
Frame* frame;
struct FrameNode* next;
} FrameNode;
功能:
FrameNode* addFrame(Frame* frame)
{
char name[100] = { 0 };
char path[100] = { 0 };
int dur = 0;
Frame* p = (Frame*)malloc(sizeof(Frame));
printf("*** Creating a new frame ***\n");
printf("Please insert frame path:\n");
fgets(path, 100, stdin);
path[strcspn(path, "\n")] = 0;
strcpy(p->path, path);
printf("Please insert frame duration <in miliseconds>:\n");
scanf("%d", &dur);
getchar();
p->duration = dur;
printf("Please chooce a name for a new frame:\n");
fgets(name, 100, stdin);
name[strcspn(name, "\n")] = 0;
strcpy(p->name, name);
while (list != NULL)
{
if (strcmp(list->frame->name, p->name) == 0)
{
printf("The name is already taken, Please enter another name\n");
fgets(name, 100, stdin);
name[strcspn(name, "\n")] = 0;
strcpy(p->name, name);
}
list = list->next;
}
free(p);
return p;
}
FrameNode* insertAtEnd(FrameNode** list, Frame* fr)
{
if (*list)
{
FrameNode* help = *list;
FrameNode* tmp = (FrameNode*)malloc(sizeof(FrameNode));
tmp->frame = addFrame(fr);
while (help->next != NULL)
{
help = help->next;
}
help->next = tmp;
}
else
{
list = (FrameNode*)malloc(sizeof(FrameNode));
FrameNode* tmp = (FrameNode*)malloc(sizeof(FrameNode));
tmp->frame = addFrame(fr);
list = tmp;
}
}
我真的需要幫助,我必須在周日之前提交。 如果您發現任何問題,請告訴我謝謝大家!!!!!!!
鏈表的單獨結構通常只會增加復雜性。 為什么不直接使用:
struct my_frame {
struct my_frame *next;
char *name;
int duration;
char *path;
}
它降低了復雜性並簡化了 memory 分配。
一些個人喜好:我建議使用前綴來防止像“框架”這樣的通用名稱。 我還建議刪除 typedef。 它對你沒有任何作用。 它只會增加模糊性。 去掉類型名稱中的大寫字母。 If you want to program in C, learn C don't try to make it look like C++, C# or Java.
在addFrame
function 結束時,您釋放p
,但隨后您將其返回。
所以在tmp->frame = addFrame(fr);
在 function insertAtEnd
中,您分配了一個已被釋放的指針,其內容未知。
解決方案是簡單地刪除addFrame
中的free(p)
行,但請確保稍后在程序中為該列表提供釋放機制。
編輯:另外,我現在在list = tmp;
行中看到了 ,你實際上是在給局部變量list
賦值,你應該做的是*list = tmp
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.