读书人

帮忙看看哪错了写入位置发生访问冲突,

发布时间: 2012-03-24 14:00:47 作者: rapoo

帮忙看看哪错了写入位置发生访问冲突

C/C++ code
#include<stdio.h>#include<stdlib.h>#include<conio.h>#define LIST_INIT_SIZE 30#define OK 1#define ERROR -1typedef char ElemType;typedef int Status;typedef struct{    ElemType *elem;    int length;    int listsize;}SqList;Status InitList(SqList * L)                   //构造一个空的线性表{    L->elem=(ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));    if(!L->elem)  {printf("内存分配失败\n");exit(OVERFLOW);}        L->length=L->listsize=LIST_INIT_SIZE;    printf("内存分配成功\n\n");    return OK;}Status ValueGiven(SqList *L)              //线性表赋值{    for(int i=0;i<LIST_INIT_SIZE-2;i++)        L->elem[i]=i;        return OK;}Status ListInsert(SqList * L,int i,ElemType e)           //在顺序线性表L中的第i个位置之前插入新的元素e{    int *q=NULL,*p=NULL;    if ( i<0 || i>L->length )  return ERROR;    *q=L->elem[i-1]; //显示0x00881672 处有未经处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突    for(*p=L->elem[LIST_INIT_SIZE-3];p>=q;--p)        *(p+1)=*p;    *q=e;    ++L->length;    return OK;}

麻烦看看哪出错了?都快搞晕了,我已经给表赋值了,1-29。可是进行到上面那句时出错了。。。

[解决办法]
当然你的赋值函数也要改。。。汗
C/C++ code
Status ValueGiven(SqList *L)              //线性表赋值{    for(int i=0;i<LIST_INIT_SIZE-2;i++)        L->elem[i]=i;    l->length = LIST_INIT_SIZE-2;        return OK;}
[解决办法]
F10进入单步调试 F11进入函数 记得观察局部变量 和 内存

读书人网 >C语言

热点推荐