LinkedListInit, LinkedListCreateH 方法中的"L->next=NULL"有什么问题吗?
is there any wrong with the "L->next=NULL" in the LinkedListInit, LinkedListCreateH method?
我正在设置一个新的C++控制台应用程序,但它说我在程序中使用 NULL 指针时遇到了一些问题。在我的代码中找不到strong text
链接列表 L 和 Node *p 的启动。在我的程序中找不到扫描的返回值。
这是一个新的C++窗口应用程序。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node* next;
}Node, * LinkedList;
LinkedList LinkedListInit() {
Node* L;
L = (Node*)malloc(sizeof(Node));
if (L == NULL)printf("申请内存空间失败/n");
L->next = NULL;
}
LinkedList LinkedListCreateH() {
Node* L;
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
ElemType x;
while (scanf("%d", &x) != EOF) {
Node* p;
p = (Node*)malloc(sizeof(Node));
p->data = x;
p->next = L->next;
L->next = p;
}
return L;
}
LinkedList LinkedListCreatT() {
Node* L;
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
Node* r;
r = L;
ElemType x;
while (scanf("%d", &x) != EOF) {
Node* p;
p = (Node*)malloc(sizeof(Node));
p->data = x;
r->next = p;
r = p;
}
r->next = NULL;
return L;
}
LinkedList LinkedListInsert(LinkedList L, int i, ElemType e) {
Node* pre;
pre = L;
int tempi = 0;
for (tempi = 1; tempi < i; tempi++)
pre = pre->next;
Node* p;
p->data = e;
p->next = pre->next;
pre->next = p;
}
LinkedList LinkedListDelete(LinkedList L, ElemType e) {
Node* p, * pre;
p = L->next;
while (p->data != e) { pre = p; p = p->next; }
pre->next = p->next;
free(p);
return L;
}
int main() {
LinkedList list, start;
LinkedListInit();
printf("请输入单链表的数据:");
for (start = list->next; start != NULL; start = start->next)printf("%d", start->data);
printf("/n");
int i;
ElemType x;
printf("请输入插入数据位置:");
scanf("%d", &i);
printf("请输入插入数据的值:");
scanf("%d", &x);
LinkedListInsert(list, i, x);
for (start = list->next; start != NULL; start = start->next)printf("%d", start->data);
printf("/n");
printf("请输入要删除元素的值:");
scanf("%d", &x);
LinkedListDelete(list, x);
for (start = list->next; start != NULL; start = start->next)printf("%d", start->data);
printf("/n");
return 0;
}
我希望输出 0,9....,但现在是 0
您有多个函数具有非 void 返回类型但没有 return 语句。
LinkedList LinkedListInit() {
和
LinkedListInsert
这是未定义的行为,在那之后,所有的赌注都关闭了。
int main() {
LinkedList list, start;
LinkedListInit();
printf("请输入单链表的数据:");
for (start = list->next; // <- blam
list
未初始化为任何内容,因此访问list->next
应该会崩溃。这是假设你在 C 模式下编译(你可以,这个代码没有任何 ++(,如果你把它编译为 C++,你很可能会更早地被 xaxxon 所说的烧毁,因为编译器不会在 LinkedListInit 的末尾生成返回指令,你开始执行随机垃圾(至少这是 gcc 和 clang 倾向于做的事情(。
不返回你承诺的值在 C 中有点合法(不是在 C++ 中(,但仍然是一个坏主意。
相关文章:
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- 对于set上的循环-获取next元素迭代器
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 为什么 std::next 在以空地图开头馈送时卡住
- 检查字符串是否"null" C++
- fopen 在 gdb 中返回 NULL
- what(): basic_string::_M_construct null not valid
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- LinkedListInit, LinkedListCreateH 方法中的"L->next=NULL"有什么问题吗?
- 跟进哈希表 C++,this->next = NULL 指针
- 遍历链表: while(ptr!=NULL) vs while(ptr->next!=NULL)?
- DirectX pEnum->Next(1,&pPin,NULL) 返回S_FALSE
- 为什么我对指针>next == NULL 的检查在我的链表中出现错误?