始终不能解决c6001报错的问题,代码可以运行,但是调试了一两个数之后就会报错
第二张图的33行改成SeqList* L=NULL;
您的问题就是 SeqList* L.声明了2次,在第一张图的19行和第二张图的33行声明的虽然是名字相同,但却是完全独立的两个变量,33行声明的L在init_SeqList()函数返回后就已经回收了,实际造成第一张图声明的L变量根本没有初始化,当然c编译器不会检查这些的,所以会造成代码可以运行,但是调试了一两个数之后就会报错的错误,你把init_SeqList()函数中的L声明放到外面19行声明之后初始化就ok了。
应该是未定义L,进入Switch语句之后系统会判断没有进1的case下L就没有初始化,这样在别的case里调用L的函数引用的地址是错误的,但它没办法判断你是否就是要通过case1来初始化,所以是warning不是error
第19行改为SeqList *L=NULL;
其实更好的做法是删掉case 1
的初始化,前面改为SeqList *L=init_SegList();
,这样就可以确保L是始终有效的,后面其他操作就不会有问题。
C6001这个是编译警告,不是编译错误
意思是使用了一个未初始化的本地变量,这个变量就是你代码中的19行代码
//声明变量后未初始化
SeqList* L;
//正确的可以改成如下方式
SeqList* L = NULL;
修改后再编译试试看
还有,微软官方就这个编译问题有文章介绍,你也可以看一下
C6001 - Visual Studio 2015 | Microsoft Learn