请问下面这个警告表示什么意思?

warning C4700: local variable ✀a✀ used without having been initialized
2024-12-31 14:13:31
推荐回答(1个)
回答1:

  1. #include "stdio.h"
    #include "stdlib.h"
    #define ERROR 0
    #define ok 1
    #define OVERFLOW -2
    #define list_init_size 100//线性表存储空间的初始分配量
    #define listincrement 10//线性表存储空间分配增量
    typedef int status;
    typedef int elemtype;//类型定义
    typedef struct{
    elemtype *elem;//存储空间基址
    int length;//当前长度
    int listsize;//当前分配的存储容量 (以sizeof(ElemType)为单位)
    }sqlist;
    status Initlist(sqlist l,int list_number)
    {if(list_number>list_init_size) return ERROR;
    l.elem=(elemtype*)malloc(list_number*sizeof(elemtype));
    if(!l.elem) exit(OVERFLOW);
    l.length=0;
    l.listsize=list_number;
    return ok;
    }
    //在线性表中插入一个元素
    status listinsert_sq(sqlist l,int i,elemtype e )//构造一个空线性表L
    {/*在顺序线性表L中的第i个位置之前插入新的元素e
    i的合法值为1<=i<=listlength-sq(L)+1*/
    elemtype *p,*q,*newbase;
    if(i<1||i>l.length+1) return ERROR;
    if(l.length>=l.listsize)
    { //当前存储空间已满,增加分配
    newbase=(elemtype*)realloc(l.elem,(l.listsize+listincrement)*sizeof(elemtype));
    if(!newbase) return(OVERFLOW);
    l.elem=newbase;//新基址
    l.listsize+=listincrement;
    }
    q=&(l.elem[i-1]);
    for(p=&(l.elem[l.length-1]);p>=q;--p) *(p+1)=*p;//插入位置及之后的元素后移
    *q=e;
    ++l.length;
    return ok;
    }
    void outputlist(sqlist l)
    {int j;
    for(j=0;jprintf("%d",l.elem[j]);
    printf("\n");
    }
    main()
    {int n,i,s,e;
    sqlist l;
    printf("输入元素个数:");
    scanf("%d",&n);
    Initlist(l,n);

    printf("输入线性表元素:");
    for(i=0;iscanf("%d",&l.elem[i]);
    l.length=n;
    outputlist(l);

    printf("插入位子与元素:");
    scanf("%d%d",&s,&e);
    listinsert_sq(l,s,e);
    outputlist(l);
    printf("程序结束!\n");
    }

  2. 程序中main函数中的l变量应作为全局变量,放在最最开始的那几行,在执行完函数时的过程中,l中三元素的值当然会变,但执行完,l就有返回执行前的状态了,函数在执行时会为括号中的各个参数创建一块空间,但执行完毕之后就会自动释放。

  3. 例如在执行status status Initlist(sqlist l,int list_number)时,编译器先为l建一个复制品,名字也叫l,在执行完这个函数后,那个复制的l就没了,只剩下原来的l,程序中的status listinsert_sq(sqlist l,int i,elemtype e )也是这个毛病,++l.length只在函数中改变了那个复制品的length值,执行完这个函数后l.length还是原来那个l.length(比预期的总少一),导致在执行插入操作后,程序输出总是少了最后一个数。 

  4. warning C4700: local variable 'l' used without having been initialized的意思是没对l初始化,程序中的status Initlist(sqlist l,int list_number)这个函数只对你那个复制品l初始化了,其实l并没被初始化。