在实验课上,在做散列表的我又一次遇到了“无法创建变量对象的问题”。
报错如下:
Process finished with exit code -1073741819 (0xC0000005)
下面是修改后的完整代码,出现问题的地方我会用注释来解释。
1 #include<iostream> 2 using namespace std; 3 4 int H(int k,int n){ 5 return k%n; 6 } 7 int HashSearch1(int k, int *&p,int n,int ht[]){//此处使用了&p来引用主函数中的指针p 8 int i, j; 9 j = H(k,n); 10 i = j; 11 if (ht[i] == k) {//查找成功 12 *p = i; 13 return 1; 14 } 15 if(ht[i]==0){//插入成功 16 ht[i] = k; 17 *p = i; 18 return 0; 19 } 20 21 i = (i + 1) % n;//向后探 22 while(i!=j){ 23 if(ht[i]==k){//查找成功 24 *p = i; 25 return 1; 26 } 27 if(ht[i]==0){//插入成功 28 ht[i] = k; 29 *p = i; 30 return 0; 31 }else{ 32 i = (i + 1) % n; 33 } 34 } 35 return -1;//表满 36 } 37 38 int main(){ 39 int att,data,now=0; 40 int ht[100]={0},n=0; 41 int *p=&now;//又是你呀,指针大哥。由于之前 int *p;是野指针并没有用变量来初始化,会导致它指向莫名其妙的地方,从而使程序崩溃。 42 cout<<"输入闭散列表的大小"<<endl; 43 cin>>n; 44 cout<<"输入查找值"<<endl; 45 cin>>data; 46 while(data!=0){ 47 att=HashSearch1(data,p,n,ht); 48 if(att==1){ 49 cout<<"查找成功"<<endl; 50 } 51 if(att==0){ 52 cout<<"查找失败,插入查找值"<<endl; 53 } 54 if(att==-1){ 55 cout<<"溢出"<<endl; 56 } 57 cin>>data; 58 } 59 60 return 0; 61 }
类似的见我的另一篇博客(2条消息) 关于函数传参的再理解(含引用)_secant007的博客-CSDN博客