【发布时间】:2020-10-19 08:24:24
【问题描述】:
我有以下结构元素:
typedef struct struct_element{
Tache t;
struct struct_element *suivant;
}Element;
typedef Element* Liste;
我正在尝试创建一个函数“ajoutdeb”,它应该创建一个新元素,并使列表的当前第一个元素成为新元素的下一个元素。这样新元素将被放置在链表的开头。这是我的实现:
void ajoutdeb(Liste* l, Tache t)
{
Element e;
e.t = t;
e.suivant = *l;
*l = &e;
}
我的问题是新元素的下一个元素是它自己。我的函数逻辑有什么问题?
示例代码:
#include <stdio.h>
typedef struct{
int no; /*le nom de la tache*/
int duree; /* la duree de la tache*/
int nbPred; /* le nombre effectif de predecesseur de la tache*/
int pred[16]; /*le tableau des predecesseurs*/
char titre[256]; /*le titre de la tache*/
}Tache;
typedef struct struct_element{
Tache t;
struct struct_element *suivant;
}Element;
typedef Element* Liste;
void ajoutdeb(Liste* l, Tache t)
{
Element e;
e.t = t;
e.suivant = *l;
*l = &e;
}
int main()
{
int nb;
Liste liste = NULL;
Tache t1 = {
.titre = "Init",
.no = 0
};
Tache t2 = {
.titre = "Deuxième",
.no = 1
};
ajoutdeb(&liste, t1);
ajoutdeb(&liste, t2);
return 0;
}
【问题讨论】:
-
一个问题是变量
e存在于栈中,因此函数结束后将无法访问。 -
请发送minimal reproducible example。问题在显示的代码中,但为了解释问题,我们需要一个通用的上下文来参考。
-
你展示的新代码不应该有你描述的问题。您如何检查问题?
-
谢谢。看起来通过动态分配 e 我的问题解决了
-
那么请不要修改问题中的代码。它使这个问题对其他人来说完全毫无价值,因为它实际上并没有描述问题。
标签: c pointers linked-list