如下代码,提示 处有未经处理的异常: 求助

在查找时出现12.exe 中的 0x102214cf (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x0000007b 时发生访问冲突。
查找的代码如下
void Search_i(SqList*&L)//按书号查询
{
printf("请输入你想要查找图书的书号:");
char isbn[50];
scanf("%s",&isbn);
int i=0;
while(ilength&&strcmp(L->data[i].isbn,isbn)!=0)
{
i++;
}
if(i>=L->length)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
void Search_n(SqList*&L)//按书名查询
{
printf("请输入你想查找图书的书名:");
char name[50];
scanf("%s",&name);
int i=0,b=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].name,name)==0)
b++;
}
if(b==0)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(i=0;i!=L->length;i++)
{
if(strcmp(L->data[i].name,name)==0)
{
printf("%s\t《%s》\t%s\t%s\t%d册\t%s元",L->data[i].isbn,L->data[i].name,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
}
}
void Search_w(SqList*&L)//按作者查询
{
printf("请输入你想要查找图书的作者:");
char writer[50];
scanf("%s",&writer);
int i=0,b=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].writer,writer)==0)
b++;
}
if(b==0)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("%s的作品共有%d本,信息如下:\n",writer,b);
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].writer,writer)==0)
{
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
}
}
void Search_p(SqList*&L)//按出版社查询
{
printf("请输入你想要查找图书的出版社:");
char producter[50];
scanf("%s",&producter);
int i=0,c=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].producter,producter)==0)
c++;
}
if(c==0)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("%s的作品共有%d本,信息如下:\n",producter,c);
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].producter,producter)==0)
{
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
}
}

不好意思,刚才看错了
拿VC++帮忙调试了下。

 printf("%s\t《%s》\t%s\t%s\t%d册\t%s元", L->data[i].isbn, L->data[i].name, L->data[i].writer, L->data[i].producter, L->data[i].num, L->data[i].price);

这里少了作者参数,你的格式有6个,后面的参数只有5个,显然指针越界了。

0x0000007b
这种指针指向一个很小的数字的,都是内存没有初始化造成的。

你的代码太乱,也没法调试。要想知道准确的原因,你要么将完整代码贴在codepad.org,在此贴出链接。

要么用f5方式调试运行,贴出出错的行。

设置断点单步调试。多检查指针

代码错误太多,连录入都不对。
你的L没有初始化
InitList只是初始化了list,其中
ElemType data[MaxSize],data1[MaxSize];
这两个数组都没有初始化。

源代码要大改。



void Search_n(SqList*&L)//按书名查询
{
printf("请输入你想查找图书的书名:");
char name[50];
scanf("%s", &name);
int i = 0, b = 0;
for (i; i != L->length; i++)
{
if (strcmp(L->data[i].name, name) == 0)
b++;
}
if (b == 0)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for (i = 0; i != L->length; i++)
{
if (strcmp(L->data[i].name, name) == 0)
{
printf("%s\t《%s》\t%s\t%s\t%d册\t%s元", L->data[i].isbn, L->data[i].name, L->data[i].writer, L->data[i].producter, L->data[i].num, L->data[i].price); //修正行
printf("\n");
}
}
}
}