单链表初始化问题
严重性 代码 说明 项目 文件 行 禁止显示状态错误 C4700 使用了未初始化的局部变量“L” Project1 D:\Mycode\算法基础与在线实践\Project1\Project1\test02.c 58
void InitList(SLinkNode* L) {
L = (SLinkNode*)malloc(sizeof(SLinkNode));
L->next = NULL;
}
void main() {
int i;
ElemType e;
SLinkNode *L;
InitList(L);
InsElem(L, 1, 1);
} #include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct student{
int a , b , c ;
struct student * next ;
} SLinkNode ;
void InitList(SLinkNode * L)
{
L = (SLinkNode *)malloc(sizeof(SLinkNode)) ;
L -> next = NULL ;
}
void InsElem(SLinkNode* L , int a , int b)
{
}
int main(void)
{
int i ;
ElemType e ;
SLinkNode * L ;
InitList(L) ;
InsElem(L, 1, 1) ;
}
这个代码可以在 VC6.0、VC2019 以及 gcc 10.2.0 编译器下被成功编译。 jackz007 发表于 2021-10-21 00:11
这个代码可以在 VC6.0、VC2019 以及 gcc 10.2.0 编译器下被成功编译。
和我写的好像一样,它说我初始化出问题,我也不知道问题在哪 a327904410 发表于 2021-10-21 00:17
和我写的好像一样,它说我初始化出问题,我也不知道问题在哪
你应该把代码贴全,再说说你使用的是哪个编译器,这样,好让别人也能重现你遭遇到的情况。 jackz007 发表于 2021-10-21 00:20
你应该把代码贴全,再说说你使用的是哪个编译器,这样,好让别人也能重现你遭遇到的情况。
昨晚早睡了{:10_319:},用的是VS2019
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct node {
ElemType data;
struct node* next;
}SLinkNode;
void InitList(SLinkNode* L) {
L = (SLinkNode*)malloc(sizeof(SLinkNode));
L->next = NULL;
}
void DestroyList(SLinkNode *L){
SLinkNode *pre = L, *p = pre->next;
while(p!=NULL){
free(pre);
pre = p;
p = p->next;
}
free(pre);
}
void InsElem(SLinkNode* L, ElemType x, int i) {
int j = 0;
SLinkNode *p = L, *s;
if (p != NULL && j < i - 1) {
j++;
p = p->next;
}
if (p == NULL) {
return 0;
}
else {
s = (SLinkNode*)malloc(sizeof(SLinkNode));
s->data = x;
p->next = s->next;
p->next = s;
return 1;
}
}
void DispList(SLinkNode *L) {
SLinkNode* p;
p = L->next;
while (p != NULL) {
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
void main() {
int i;
ElemType e;
SLinkNode *L;
InitList(L);
InsElem(L, 1, 1);
}
jackz007 发表于 2021-10-21 00:11
这个代码可以在 VC6.0、VC2019 以及 gcc 10.2.0 编译器下被成功编译。
我运行了你的代码,也是一样的提示 jackz007 发表于 2021-10-21 00:20
你应该把代码贴全,再说说你使用的是哪个编译器,这样,好让别人也能重现你遭遇到的情况。
在VC6.0我的代码编译通过,是编译器问题 本帖最后由 jackz007 于 2021-10-21 13:44 编辑
a327904410 发表于 2021-10-21 13:21
在VC6.0我的代码编译通过,是编译器问题
不是编译器问题,代码我已经修改,你可以再次尝试在 VS2019 下编译。
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct node {
ElemType data;
struct node* next;
}SLinkNode;
void InitList(SLinkNode* L) {
L = (SLinkNode*)malloc(sizeof(SLinkNode));
L->next = NULL;
}
void DestroyList(SLinkNode *L){
SLinkNode *pre = L, *p = pre->next;
while(p!=NULL){
free(pre);
pre = p;
p = p->next;
}
free(pre);
}
void InsElem(SLinkNode* L, ElemType x, int i) {
int j = 0;
SLinkNode *p = L, *s;
if (p != NULL && j < i - 1) {
j++;
p = p->next;
}
if (p) {
s = (SLinkNode*)malloc(sizeof(SLinkNode));
s->data = x;
p->next = s->next;
p->next = s;
}
}
void DispList(SLinkNode *L) {
SLinkNode* p;
p = L->next;
while (p != NULL) {
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
int main(void) {
int i ;
ElemType e ;
SLinkNode * L = NULL ;// 变量一定要先初始化,然后再使用
InitList(L) ;// 变量一定要先初始化,然后再使用
InsElem(L, 1, 1) ;
}
InsElem(L, 1, 1) 函数定义的返回类型为 void,却有两个 retrn 带返回值,这在编译时会被警告,我也已经改过。
vs2019 编译实况:
D:\00.Excise\C>cl x.c
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.28.29334 版
版权所有(C) Microsoft Corporation。保留所有权利。
x.c
Microsoft (R) Incremental Linker Version 14.28.29334.0
Copyright (C) Microsoft Corporation.All rights reserved.
/out:x.exe
x.obj
D:\00.Excise\C> jackz007 发表于 2021-10-21 13:38
不是编译器问题,代码我已经修改,你可以再次尝试在 VS2019 下编译。
InsElem(L, 1,...
运行没报错。学习了,谢谢{:10_323:}
页:
[1]