【发布时间】:2017-04-30 02:57:53
【问题描述】:
我正在创建一个链表类型的数据结构,但不完全是。到目前为止,我有以下内容,但问题是,在此方法完成后,只有第一个链接仍然存在,第一个链接之后的链接消失了。这里有什么问题?
//Global Vars
m_p H = NULL; //m_p is the struct
func(){
/* .... */
H = malloc(sizeof(m_r));
H->next = NULL;
H->previous = NULL;
m_p p = H;
for(i = 0; i < nLists; i++){
m_p n = malloc(sizeof(m_r));
n->next = NULL;
n->previous = p;
p->next = n;
p = p->next;
}
//if I iterate through the links here, they all print out fine
m_p x = H;
while(x != NULL){
printf("%d ", x->data);
x = x->next;
}
}
既然 H 是一个全局变量,链接不应该保持原样吗?当我尝试遍历同一文件中另一个函数中的链接时,它们不存在,只有第一个存在。我做错了什么?
编辑:我省略了在每个结构中设置数据字段以保持代码简洁的部分。
编辑2:这是另一个文件中的一个函数,这是发生错误的地方:
extern m_p H;
m_p func2(int s) {
int n_s = ALIGN(s);
m_p p = H;
while(p != NULL ){
printf("1. %d \n", p->data);
p = p->next; //this is always NULL even if there were more than one node previously in func()
if(p == NULL) printf("LINK NOT PRESENT \n");
}
/* ... */
}
这也是我的结构的样子:
typedef struct m{
struct m *next;
struct m *previous;
int data;
} m_r, *m_p;
【问题讨论】:
-
哎呀,我在尝试重新输入时出错了。 @BLUEPIXY
-
这就是我的代码的样子;它仍然给出错误。 @BLUEPIXY
-
错误仍然存在@BLUEPIXY
-
第一个节点的
previous和最后一个节点的next没有设置。 -
即使它们不是,如果我只使用下一个指针来迭代打印数据,为什么会产生问题?
标签: c pointers data-structures linked-list malloc