gpt4 book ai didi

c - 段错误 11 : 10

转载 作者:行者123 更新时间:2023-11-30 20:59:33 25 4
gpt4 key购买 nike

我在解决问题时遇到了问题。当我尝试此代码时,我收到继续段错误:11 错误。每次我更改代码时都会弹出错误,并且我不知道缺陷在哪里,所以如果有人看到该缺陷,我将不胜感激。

我先谢谢你了。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "dbg.h"

typedef struct node{
char *data;
struct node *next;
} node_t;

node_t **push(node_t **head, char *data){
node_t *new_node;
new_node = malloc(sizeof(node_t));

new_node->data = data;
new_node->next = *head;
*head = new_node;
free(new_node);

return head;
}

int main(int argc, char *argv[])
{
node_t **head;
char *data = "hoi";
char *data2 = "hallo";
head = malloc(20 * sizeof(node_t));
head = push(head, data);
head = push(head, data2);
printf("%s\n",(*head)[1].data);
free(head);

return 0;
}

最佳答案

缺陷:

  • 您的push()函数赋值new_node*head ,使其可供 push() 的调用者访问,但在函数结束时您释放 new_node ,使其成为悬空指针。这是出现段错误的良好基础。
  • head是一个指向指针的指针,但被分配了 malloc() 的结果调用似乎表明它应该是一个指向节点的指针。
  • 你的设计很困惑:你想在 push() 中分配内存吗? main() 。当然,两者都不是一个好的选择。
  • 您正在用非常量指针指向常量字符串。这很危险。通过这些指针写入常量字符串也可能导致段错误。

这是您的程序的有效版本:

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

struct node {
const char *data;
struct node *next;
};

static struct node *push(struct node *head, const char *data) {
struct node *node;
node = malloc(sizeof *node);

node->data = data;
node->next = head;

return node;
}

int main(int argc, char *argv[])
{
struct node *head = NULL;
const char *data = "hoi";
const char *data2 = "hallo";
head = push(head, data);
head = push(head, data2);
struct node *node = head;
while (node) {
printf("%s\n", node->data);
node = node->next;
}

return 0;
}

请注意,我实现了 LIFO 结构,又名。一个堆栈,因为 push()函数通常应用于堆栈。

您合乎逻辑的下一步是实现 pop()功能。通常,我会建议pop()释放节点并返回数据。这将为您的 API 提供良好的对称性。

关于c - 段错误 11 : 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47097627/

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