首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

急高手帮忙,用Dev c++时产生一个访问违例(段错误)

2012-03-06 
急急急,高手帮忙,用Dev c++时产生一个访问违例(段异常)各位高手快帮帮我,我在用Devc++写下面程序的时候,编

急急急,高手帮忙,用Dev c++时产生一个访问违例(段异常)
各位高手快帮帮我,我在用Dev   c++写下面程序的时候,编译通过,但不能运行,提示 "产生一个访问违例(段异常) "
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define   TRUE   1
#define   FALSE   0
#define   OK   1
#define   ERROR   0
#define   INFEASIBEL   -1
#define   OVERFLOW   -2
typedef   int   Status;

#define   LIST_INIT_SIZE   100
#define   LISTINCREMENT   10
typedef   int   ElemType;
typedef   struct   {
                ElemType   *elem;
                int   length;
                int   listsize;
                }   List;


Status   initList(List   *l){
              l-> elem=(ElemType   *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
              if(!l-> elem)
              return   ERROR;
              l-> length=0;
              l-> listsize=LIST_INIT_SIZE;
              return   OK;
}


Status   listInsert(List   *l,int   i,ElemType   e){
              if(i <1||i> l-> length+1)
              return   ERROR;
              if(l-> length> =l-> listsize){
              l-> elem=(ElemType*)realloc(l-> elem,(l-> listsize+LISTINCREMENT)*sizeof(ElemType));
              if(!l-> elem)   exit(OVERFLOW);
              l-> listsize+=LISTINCREMENT;
              }
              ElemType   *p,*q=&(l-> elem[i-1]);
              for(p=&(l-> elem[l-> length-1]);p> =q;--p){
              *(p+1)=*p;
              }
              *q=e;
              l-> length++;
              return   OK;
              }
                       

  Status   printList(List   *l){
                if(l-> length <1)
                return   ERROR;
                for(int   i=0;i <l-> length;i++){
                                printf( "%d\t ",l-> elem[i]);
                                }
                return   OK;
                }



int   main(void){
        List   *mylist=NULL;
        if(initList(mylist)==ERROR)
        {
        printf( "error ");
        exit(0);
        }
       
        int   a=10;
        if(listInsert(mylist,1,a)==ERROR){
        printf( "can 't   insert\n ");
        }
       
        if(printList(mylist)==ERROR){
        printf( "no   element\n ");  
        }
       
        getchar();
}

请高手指点

[解决办法]
首先,你的语句:

List *mylist=NULL;

这里mylist已经是NULL了,你还把它传到函数initList里,...不错才怪...

而用你的main函数应该有一条return语句...你可以先加上试试....或者把main函数前的int 改成void...
[解决办法]
意思也就是说你传到函数Status initList(List *l)里的变量在使用之前应该被初始化...
[解决办法]
把main函数里的第一条语句

List *mylist=NULL;

必成如下形式即可....


List *mylist = (List *) malloc(sizeof(List));

热点排行