急急急,高手帮忙,用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));