繁体   English   中英

将指针元素添加到链表

[英]add pointer elements to linked list

是否可以在不更改主函数的情况下使代码工作? 我曾尝试在 push 函数中使用strcpy()但它导致分段错误(核心转储)。
这是当前的输出:

ccc ccc ccc
ccc ccc ccc
ccc ccc ccc

输出应该是

ccc ccc ccc
bbb bbb bbb
aaa aaa aaa  

代码:

struct Node
    {
        char *data1;
        char *data2;
        char *data3;
        struct Node *next;
    };

   int main()
   {
       struct Node *head = NULL;
       char strings[3][10];
       char *s = "aaa";
       for (int i = 0; i < 3; i++)
       {
           strcpy(strings[i], s);
       }
       push(&head, strings);
       s = "bbb";
       for (int i = 0; i < 3; i++)
       {
           strcpy(strings[i], s);
       }
       push(&head, strings);
       s = "ccc";
       for (int i = 0; i < 3; i++)
       {
           strcpy(strings[i], s);
       }
       push(&head, strings);
   
       printList(head);
       freeList(&head);
   }

void push(struct Node **head_ref, char new_data[3][10])
{
   /* 1. allocate node */
   struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));

   /* 2. put in the data  */
   new_node->data1 = new_data[0];
   new_node->data2 = new_data[1];
   new_node->data3 = new_data[2];

   /* 3. Make next of new node as head */
   new_node->next = (*head_ref);

   /* 4. move the head to point to the new node */
   (*head_ref) = new_node;
}

您一遍又一遍地使用相同的strings 您必须为每个字符串分配(在push )新数组。 例如:

new_node->data1 = malloc(10);
new_node->data2 = malloc(10);
new_node->data3 = malloc(10);

strcpy(new_node->data1, new_data[0]);
strcpy(new_node->data2, new_data[1]);
strcpy(new_node->data3, new_data[2]);

您的代码中的问题是分配的节点的指针都指向相同的 3 个内存位置: strings[0]strings[1]strings[2]

声明:

new_node->data1 = new_data[0];
new_node->data2 = new_data[1];
new_node->data3 = new_data[2];

不要将字符串复制到 data1、data2 和 data3,而是将内存地址存储在其中。

如果要复制 new_data[0]、new_data[1] 和 new_data[2] 中包含的字符串,则应将内存分配给 data1、data2 和 data3,并使用函数strcpy()来完成。

例子:

new_node->data1 = malloc(strlen(new_data[0]) + 1);
new_node->data2 = malloc(strlen(new_data[1]) + 1);
new_node->data3 = malloc(strlen(new_data[2]) + 1);

strcpy(new_node->data1, new_data[0]);
strcpy(new_node->data2, new_data[1]);
strcpy(new_node->data3, new_data[2]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM