gpt4 book ai didi

c - 插入函数中的指针在 C 中给出错误

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

我操纵我的代码以便能够使用 pred_p 但此后遇到了问题。我的代码停在“pred_p->next_p = temp_p;”行并给我消息“Thread 1: EXC_BAD_ACCESS (code=1, address=0x8).Not sure where to go from here.

struct list_node_s {
int data;
struct list_node_s* next_p;
};

struct list_node_s* Insert(struct list_node_s* head_p, int val);
void Print(struct list_node_s* head_p);
char Get_command(void);
int Get_value(void);

/*-----------------------------------------------------------------*/
int main(void) {
char command;
int value;
struct list_node_s* head_p = NULL;
/* start with empty list */

command = Get_command();
while (command != 'q' && command != 'Q') {
switch (command) {
case 'i':
case 'I':
value = Get_value();
head_p = Insert(head_p, value);
break;
case 'p':
case 'P':
Print(head_p);
break;
default:
printf("There is no %c command\n", command);
printf("Please try again\n");
}
command = Get_command();
}

return 0;
} /* main */


/*-----------------------------------------------------------------*/
struct list_node_s* Insert(struct list_node_s* head_p, int val) {
struct list_node_s* curr_p = head_p;
struct list_node_s* pred_p = NULL;
struct list_node_s* temp_p;

while (curr_p != NULL) {
if (curr_p->data >= val)
break;
pred_p = curr_p;
curr_p = curr_p->next_p;
}

// Create new node
temp_p = malloc(sizeof(struct list_node_s));
temp_p->data = val;
temp_p->next_p = curr_p;
if (pred_p = NULL) {
head_p = temp_p;
}
else {
pred_p->next_p = temp_p;
}

return head_p;
} /* Insert */

最佳答案

 if (pred_p = NULL)

应该是

if (pred_p == NULL)

你在技术上重复了自己,作为一个 =,只是再次将 NULL 分配给 pred_p

还有

您需要使用 pred_p=malloc(sizeof struct list_node_s) 为 pred_p 分配内存。

只有当 head_p 不是 NULL 时,上面的代码才会正常工作,这意味着 curr_p 不会是 NULL 然后又是 pred_p 但是你永远不会注意到这个陷阱。

关于c - 插入函数中的指针在 C 中给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25942625/

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