问题描述
- 如下代码,提示 处有未经处理的异常: 求助
- 在查找时出现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].isbnisbn)!=0)
{
i++;
}
if(i>=L->length)
{
printf(""图书馆没有此图书!n"");
}
else
{
printf(""书号t书名t作者t出版社t馆存数量t价格n"");
printf(""%st 《 %s 》 t%st%st%d 册 t%s 元""L->data[i].isbnL->data[i].nameL->data[i].producterL->data[i].numL->data[i].price);
printf(""n"");
}
}
void Search_n(SqList*&L)//按书名查询
{
printf(""请输入你想查找图书的书名:"");
char name[50];
scanf(""%s""&name);
int i=0b=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].namename)==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].namename)==0)
{
printf(""%st《%s》t%st%st%d册t%s元""L->data[i].isbnL->data[i].nameL->data[i].producterL->data[i].numL->data[i].price);
printf(""n"");
}
}
}
}
void Search_w(SqList*&L)//按作者查询
{
printf(""请输入你想要查找图书的作者:"");
char writer[50];
scanf(""%s""&writer);
int i=0b=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].writerwriter)==0)
b++;
}
if(b==0)
{
printf(""图书馆没有此图书!n"");
}
else
{
printf(""%s的作品共有%d本,信息如下:n""writerb);
printf(""书号t书名t作者t出版社t馆存数量t价格n"");
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].writerwriter)==0)
{
printf(""%st 《 %s 》 t%st%st%d 册 t%s 元""L->data[i].isbnL->data[i].nameL->data[i].producterL->data[i].numL->data[i].price);
printf(""n"");
}
}
}
}
void Search_p(SqList*&L)//按出版社查询
{
printf(""请输入你想要查找图书的出版社:"");
char producter[50];
scanf(""%s""&producter);
int i=0c=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].producterproducter)==0)
c++;
}
if(c==0)
{
printf(""图书馆没有此图书!n"");
}
else
{
printf(""%s的作品共有%d本,信息如下:n""producterc);
printf(""书号t书名t作者t出版社t馆存数量t价格n"");
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].producterproducter)==0)
{
printf(""%st 《 %s 》 t%st%st%d 册 t%s 元""L->data[i].isbnL->data[i].nameL->data[i].producterL->data[i].numL->data[i].price);
printf(""n"");
}
}
}
}
解决方案
不好意思,刚才看错了
拿VC++帮忙调试了下。
printf(""%st《%s》t%st%st%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(""%st《%s》t%st%st%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"");
}
}
}
}