我在尝试将某些元素添加到链接列表时遇到了一些麻烦。我的问题是,尽管代码在函数中添加了“PROCESS”,但是一旦我离开它,“Stiva”就会变空,如果我试图“打印”它的元素,我得到的只是NULL。这是我到目前为止所写的内容,如果有人可以提供帮助我会非常感激,我真的不明白它在哪里无法通过指针传递参数:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct
{
int prioritate;
int id;
} TProces;
typedef struct celst
{
struct celst *urm;
void *info;
} TCelSt, *TStiva, **TStive;
int Push(TStiva Stiva, int id, int prt)
{
TStiva StivaNoua;
TProces proces;
StivaNoua = (TCelSt*)malloc(sizeof(TCelSt));
StivaNoua->info = (TProces*)malloc(sizeof(TProces));
proces.id = id;
proces.prioritate = prt;
memcpy(StivaNoua->info, &proces, sizeof(TProces));
StivaNoua->urm = Stiva;
Stiva = StivaNoua;
return 1;
}
int ShowStiva(TStiva Stiva)
{
TCelSt *aux;
if(Stiva == NULL) printf("CRY \n");
for(aux = Stiva; aux!=NULL; aux=aux->urm)
{
printf("[%d %d]\n", ((TProces*)(aux->info))->id, ((TProces*)(aux->info))->prioritate );
}
return 1;
}
int main()
{
TStiva Stiva;
Stiva = NULL;
Push(Stiva, 5, 8);
Push(Stiva, 8, 1);
ShowStiva(Stiva);
return 0;
}
答案 0 :(得分:1)
您需要将指针传递给TStiva
,如下所示:
int Push(TStiva *Stiva, int id, int prt)
{
TStiva StivaNoua;
TProces proces;
StivaNoua = (TCelSt*)malloc(sizeof(TCelSt));
StivaNoua->info = (TProces*)malloc(sizeof(TProces));
proces.id = id;
proces.prioritate = prt;
memcpy(StivaNoua->info, &proces,
sizeof(TProces));
StivaNoua->urm = *Stiva;
*Stiva = StivaNoua;
return 1;
}
因为您正在函数中修改它,并且在main
:
Push(&Stiva, 8, 1);
答案 1 :(得分:1)
您正在修改Stiva
中的输入参数Push
,但它只是本地修改。它不会更改main
中变量的值。
我的建议:
Push
的返回类型更改为TStiva
并返回适当的值。main
以使用Push
返回的值。TStiva Push(TStiva Stiva, int id, int prt)
{
TStiva StivaNoua;
TProces proces;
StivaNoua = (TCelSt*)malloc(sizeof(TCelSt));
StivaNoua->info = (TProces*)malloc(sizeof(TProces));
proces.id = id;
proces.prioritate = prt;
memcpy(StivaNoua->info, &proces, sizeof(TProces));
StivaNoua->urm = Stiva;
Stiva = StivaNoua;
return Stiva;
}
int main()
{
TStiva Stiva = Push(NULL, 5, 8);
Stiva = Push(Stiva, 8, 1);
ShowStiva(Stiva);
return 0;
}
答案 2 :(得分:0)
我不确定我是否了解您的LL实施情况,但这可能会对您有所帮助: