zd316 2020-10-26 15:34 采纳率: 0%
浏览 70

C语言 动态链表的注意点(出现0xcdcdcdcd的情形)

#include
#include

typedef int ElementType;
typedef struct LNode* PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrToLNode List;
typedef PtrToLNode Position;

List Read() {
PtrToLNode L;
int X;
L = (PtrToLNode)malloc(sizeof(struct LNode));
scanf_s("%d", &X);
while (X > 0) {
L = (PtrToLNode)malloc(sizeof(struct LNode));
L->Data = X;
L = L->Next;
scanf_s("%d", &X);
}
return L;
}

int Length(List L) {
Position P;
int count = 0;
P = L;
while (P) {
P = P->Next;
count++;
}
return count;
}

int main() {
List L = Read();
printf("%d\n", Length(L));
return 0;
}

在length()函数中P=P->Next中报错P:0xcdcdcdcd

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 23:16
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码中的错误是因为你在尝试访问一个指针变量的下标为0xcdcdcdcd的位置。这在C语言中是不正确的。

    你应该使用数组索引来操作指针,而不是试图通过指针来获取它的值。例如:

    Position P;
    

    这样就可以避免这种错误,并且更符合C语言的编程规范。

    List L = Read();
    printf("%d\n", Length((List *)(&L)));
    

    这里我们创建了一个指向列表的第一个元素的指针,并将这个指针传递给Length()函数,以正确地计算长度。

    评论

报告相同问题?