gpt4 book ai didi

c - 结构中的链表

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:33 27 4
gpt4 key购买 nike

我是 C 的新手,我正在尝试为我在一个小型测试应用程序中处理的程序制定逻辑。

它的目的是从数据库中读取值,将数据添加到结构中,但在该结构中将包含指向与顶级结构相关的其他值的链表。我似乎正在向结构和链表添加一些很好的东西,但是当我尝试检索它崩溃的值时。

下面是我的结构的定义

typedef struct CallLogStructure
{
char * date;
char * time;
char * bParty;
char * aParty;
float duration;
char * cleardownCause;
struct Node *outBoundLegs;
} callLogStructure;

typedef struct Node
{
char * target;
float targetDuration;
char * targetCleardownCause;
struct Node *next;
}node;

下面是我如何初始化结构,然后调用方法将数据添加到链表。

char *outboundTarget = "0";
float outboundDuration = 0;
char *outboundCleardown = "0";

callLogStructure * callLog = NULL;
node *temp = NULL;
int dataRow = 0;

callLog = malloc(dataRow+1 * sizeof(callLog));
//start = (node*)malloc(sizeof(node));
callLog[0].outBoundLegs = NULL;
callLog[0].outBoundLegs = (node*)malloc(sizeof(node));
if (callLog[0].outBoundLegs == NULL)
{
printf("Failed to allocate RAM\n");
}
temp = &callLog[0].outBoundLegs;
temp->next = NULL;
callLog[0].outBoundLegs->target = "0";
callLog[0].outBoundLegs->targetDuration = 0;
callLog[0].outBoundLegs->targetCleardownCause = "0";

//Insert first inbound leg
callLog[0].date = "16/05/2011";
callLog[0].time = "00:00:03";
callLog[0].aParty = "12345";
callLog[0].bParty = "67890";
callLog[0].duration = 0;
callLog[0].cleardownCause = "unanswered";

outboundTarget = "98765";
outboundDuration = 0;
outboundCleardown = "Unanswered";

insertOutBoundLeg(&callLog[0].outBoundLegs, outboundTarget, outboundDuration, outboundCleardown);


printf("NEWLY INSERTED OUTBOUND TARGET: %s", callLog[0].outBoundLegs->target); //This is where it's crashing.

下面是insertOutBoundLeg函数

void insertOutBoundLeg(struct Node *pointer, char * target, float targetDuration, char * targetCleardownCause)
{
if (pointer->target == NULL)
{
asprintf(&pointer->target, "%s", target);
pointer->targetDuration = targetDuration;
asprintf(&pointer->targetCleardownCause, "%s", targetCleardownCause);
//pointer->target = target;
//pointer->targetDuration = targetDuration;
//pointer->targetCleardownCause = targetCleardownCause;
}
else
{
while (pointer->next != NULL)
{
pointer = pointer->next;
}
pointer->next = (node *)malloc(sizeof(node));
pointer = pointer->next;
//pointer->target = target;
//pointer->targetDuration = targetDuration;
//pointer->targetCleardownCause = targetCleardownCause;
asprintf(&pointer->target, "%s", target);
pointer->targetDuration = targetDuration;
asprintf(&pointer->targetCleardownCause, "%s", targetCleardownCause);
pointer->next = NULL;
}
}

这个想法是,最终当它被构建时,结构以及结构中包含的链表将被传递给一个单独的函数,该函数将数据导出到一个文件,我已经通过首先打印值来尝试outboundlegs(链接列表),但这也会崩溃,但是,来自顶级结构(callLog)的值很好。

感谢您提供的任何帮助。

最佳答案

有多个问题,首先是

callLog = malloc(dataRow+1 * sizeof(callLog));

改成

callLog = malloc(dataRow+1 * sizeof(*callLog));

callLog[0].outBoundLegs 初始化为 0 作为 memset(callLog[0].outBoundLegs, 0, sizeof(*callLog[0].outBoundLegs))或者使用 calloc()

callLog[0].outBoundLegs = calloc(1, sizeof(node));

callLog[0].outBoundLegs->target = "0";

不要那样初始化字符串,做

callLog[0].outBoundLegs->target = strdup("0");

但是,请记住在适当的时候释放内存。

关于c - 结构中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17720684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com