mst*_*agg 2 c pointers linked-list
我是C的新手.我熟悉Python,Java,C#.因此,我遇到指针问题.
我试图使用结构在C中实现链表.截至目前,该程序创建了根成员,然后再添加一个成员以获得2个链接成员的列表.然后它调用print方法,该方法应遍历每个项目并打印它们.不幸的是,该程序陷入了无限循环,似乎是打印成员 - >数据地址而不是数据本身.
正如我之前所说,我熟悉一些OOP语言.这个问题令人沮丧,因为一个简单的链表是我应该能够在几分钟内完成的.有帮助吗?代码如下.
#include<stdio.h>
#include<stdlib.h>
struct Member{
int data;
struct Member *next;
};
struct Member *createMember(int i){
struct Member *new;
new = malloc(sizeof(struct Member));
new->data = i;
return new;
}
void print(struct Member *root){
struct Member *current = root;
while(current->next != NULL){
printf("%i, ", current->data);
current = current->next;
}
printf("%i", current->data);
}
main(){
struct Member *root;
root = createMember(15);
root->next = createMember(12);
print(root);
}
Run Code Online (Sandbox Code Playgroud)
这个功能:
struct Member *createMember(int i)
{
struct Member *new;
new = malloc(sizeof(struct Member));
new->data = i;
return new;
}
Run Code Online (Sandbox Code Playgroud)
分配空间并分配数据,但从不初始化next
成员.结果是该成员包含不确定的数据,因此调用未定义的行为甚至评估,更少的解引用,前者在这里完成:
void print(struct Member *root)
{
struct Member *current = root;
while(current->next != NULL){ // HERE
printf("%i, ", current->data);
current = current->next; // AND HERE
}
printf("%i", current->data);
}
Run Code Online (Sandbox Code Playgroud)
要解决当前问题,请更改分配函数以初始化所有成员:
struct Member *createMember(int i)
{
struct Member *new;
new = malloc(sizeof(struct Member));
new->data = i;
new->next = NULL; // ADDED THIS
return new;
}
Run Code Online (Sandbox Code Playgroud)
产量
15, 12
Run Code Online (Sandbox Code Playgroud)
其他问题仍然存在(内存泄漏,print()
传递NULL指针的行为,更多迂腐的错误检查等),但这与您的问题最紧迫相关.
祝你好运.
归档时间: |
|
查看次数: |
542 次 |
最近记录: |