在做顺序表的查找时遇到一个问题:使用system("pause")暂停程序时,exe文件一闪而过,之后system("pause")语句标黄,并提示:Unknown signal的异常(如图): 当时看了半天没有看出问题,之后查阅相关资料发现是内存分配异常的缘故,需要内存大于分配内存,程序并不会直接报错,修改之后程序正常运行。
修改前:
#include<iostream>
using namespace std;
typedef int KeyType ;
typedef int InfoType;
#define MAXSIZE 1000
typedef struct{
KeyType key;
InfoType otherinfo;
}ElemType;
typedef struct{
ElemType *elem;//数据元素存储空间基址,建表时按实际长度分配,0号单元留空
int length;//表的长度
}SSTable;
int Search_Seq(SSTable ST,KeyType key)
{//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为
//该元素在表中的位置,否则为0。
int i;
ST.elem[0].key=key;//设置“哨兵”
for(i=ST.length;ST.elem[i].key!=key;i--);//从后往前找
return i;//找不到时,i为0
}
int main()
{
SSTable T;
int a[12]={0,21,37,88,19,92,5,64,56,80,75,13};
T.elem=(ElemType*)malloc(sizeof(T.length+1)*2);
T.length=11;
for(int i=1;i<=11;i++)
T.elem[i].key=a[i];
printf("%d\n",Search_Seq(T,92));
system("pause");
}
修改后
#include<iostream>
using namespace std;
typedef int KeyType ;
typedef int InfoType;
#define MAXSIZE 1000
typedef struct{
KeyType key;
InfoType otherinfo;
}ElemType;
typedef struct{
ElemType *elem;//数据元素存储空间基址,建表时按实际长度分配,0号单元留空
int length;//表的长度
}SSTable;
int Search_Seq(SSTable ST,KeyType key)
{//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为
//该元素在表中的位置,否则为0。
int i;
ST.elem[0].key=key;//设置“哨兵”
for(i=ST.length;ST.elem[i].key!=key;i--);//从后往前找
return i;//找不到时,i为0
}
int main()
{
SSTable T;
int a[12]={0,21,37,88,19,92,5,64,56,80,75,13};
T.elem=(ElemType*)malloc(MAXSIZE);
T.length=11;
for(int i=1;i<=11;i++)
T.elem[i].key=a[i];
printf("%d\n",Search_Seq(T,92));
system("pause");
}
这回直接malloc一个比较大的空间,问题解决。(但是我不知道为啥之前申请的空间大小不够qaq)