[英]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.