在使用malloc在for循环中创建链表时,总是返回相同的地址的原因是因为每次循环迭代时,malloc分配的内存地址是连续的,而链表节点的地址是通过指针链接的。在每次循环迭代时,虽然使用malloc分配了新的内存空间,但由于链表节点的地址是通过指针链接的,所以每次分配的内存地址都会覆盖前一次的地址,导致最终链表中所有节点的地址都相同。
为了解决这个问题,可以在每次循环迭代时,为链表节点分配独立的内存空间。可以通过在循环内部使用malloc分配内存,并将分配的地址赋值给链表节点的指针,确保每个节点都有独立的内存地址。
以下是一个示例代码,演示如何在for循环中创建链表并避免返回相同的地址:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
int main() {
Node* head = NULL;
Node* current = NULL;
int i;
for (i = 0; i < 5; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = i;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
current = newNode;
} else {
current->next = newNode;
current = newNode;
}
}
// 打印链表节点的地址和数据
current = head;
while (current != NULL) {
printf("Node address: %p, Data: %d\n", current, current->data);
current = current->next;
}
// 释放链表内存
current = head;
while (current != NULL) {
Node* temp = current;
current = current->next;
free(temp);
}
return 0;
}
在上述示例代码中,我们在每次循环迭代时,都为链表节点分配了独立的内存空间,并通过指针链接起来。最终打印出的链表节点的地址是不同的。
对于链表的创建,可以使用腾讯云的云原生数据库TDSQL-C,它是一种高性能、高可用、弹性伸缩的云原生数据库产品,适用于各种规模的应用场景。您可以通过以下链接了解更多关于TDSQL-C的信息:TDSQL-C产品介绍。
领取专属 10元无门槛券
手把手带您无忧上云