gpt4 book ai didi

c - 为什么我在这里遇到段错误?

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

#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <stdlib.h>

typedef struct pr_struct{
int owner;
int burst_time;
struct pr_struct *next_prcmd;
} prcmd_t;

static prcmd_t *pr_head = NULL;
static prcmd_t *pr_tail = NULL;
static int pending_request = 0;
static pthread_mutex_t prmutex = PTHREAD_MUTEX_INITIALIZER;


int add_queue(prcmd_t *node)
{
pthread_mutex_lock(&prmutex);
//code
prcmd_t *curNode = pr_head;
if(pr_head == NULL) { pr_head = node; return;}
while(curNode->next_prcmd)
{
curNode->next_prcmd = (prcmd_t*)malloc(sizeof(prcmd_t));
curNode = curNode->next_prcmd;
}
curNode->next_prcmd = node;

//
pending_request++;
pthread_mutex_unlock(&prmutex);
return(0);
}



int main()
{
if (pr_head == NULL)
{
printf("List is empty!\n");
}

prcmd_t *pr1;
pr1->owner = 1;
pr1->burst_time = 10;
add_queue(pr1);
prcmd_t *curNode = pr_head;
while(curNode->next_prcmd)
{
printf("%i\n", curNode->owner);
curNode = curNode->next_prcmd;
}
}

编辑:

这是我现在拥有的...

int main()
{


prcmd_t *pr1;
pr1 = (prcmd_t*)malloc(sizeof(prcmd_t));
pr1->owner = 1;
pr1->burst_time = 10;



if (pr_head == NULL)
{

printf("List is empty!\n");
}

add_queue(pr1);


prcmd_t *curNode = pr_head;

printf("made it here 1\n");
while(curNode->next_prcmd)
{
printf("in the while loop\n");

printf("%i\n", curNode->owner);
curNode = curNode->next_prcmd;
}
}

输出是:列表为空!做到这里 1

最佳答案

pr1 是指向 prcmd_t struct 的未初始化指针,取消引用未初始化指针会导致 undefined behavior .

您需要为堆/栈上的结构分配空间(取决于它的使用位置),因此一种选择是:

// Allocate on stack
prcmd_t pr1;
pr1.owner = 1;
pr1.burst_time = 10;
add_queue(&pr1);

第二个是:

//Allocae on heap
prcmd_t *pr1;
pr = (prcmd_t*)malloc(sizeof(prcmd_t));
pr1->owner = 1;
pr1->burst_time = 10;
add_queue(pr1);

将您的 main 方法(且仅是 main)修改为:

int main()
{
if (pr_head == NULL)
{
printf("List is empty!\n");
}

prcmd_t *pr1;
pr1 = (prcmd_t*)malloc(sizeof(prcmd_t));
pr1->owner = 1;
pr1->burst_time = 10;
add_queue(pr1);
prcmd_t *curNode = pr_head;
while(curNode && curNode->owner)
{
printf("%i\n", curNode->owner);
curNode = curNode->next_prcmd;
}
}

输出

List is empty!
1

关于c - 为什么我在这里遇到段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906741/

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