gpt4 book ai didi

c++ - 我收到此错误 "Unhandled exception at 0x009437bd in Hash functions.exe: 0xC0000005: Access violation reading location 0x00000001"

转载 作者:行者123 更新时间:2023-11-30 00:57:16 25 4
gpt4 key购买 nike

当我运行我的项目时,我一遍又一遍地遇到这个错误。不知道哪里出了问题。我知道这是关于我再次使用的一些空闲内存,或者空指针或对不存在内存的访问,但实际上我检查了所有指针,它们被声明为它们应该是的。

代码如下:

#include <iostream>
using namespace std ;

typedef struct ND {
int ID;
char* Name;
char* Address;
int Age;
double GPA;
ND * next;
} NODE;

class HF {
private :
int count;
int size ;
int prime;
int a ,b;
NODE ** HT;
public:
HF ();
HF ( int n , int p , int a, int b);
~ HF ();
int findindex(int key);
bool insert (int ID,char* Name,char* Address,int Age,double GPA);
bool retrieve (int & ID,char* & Name,char* & Address,int & Age,double & GPA);
bool remove(int key);
double GetLoadFactor ();
};

HF :: HF ()
{
size = 100;
prime = 997;
a = 23 ;
b = 88;
count =0;
HT = new NODE* [size];
for (int i=0; i< size ; i++)
HT[i] = NULL;
}

HF :: HF ( int n , int p , int a, int b)
{
size = n;
prime = p;
a = a;
b = b;
count = 0;
HT = new NODE* [size];
for (int i=0; i< size ; i++)
HT[i] = NULL;
}

HF :: ~ HF ()
{
NODE *p;
for (int i=0 ; i<size ; i++)
{
while (HT[i] != NULL)
{
p = HT[i];
HT[i] = HT[i] -> next ;
delete p;
}
}
delete [] HT ;
}

int HF :: findindex(int key)
{
int index ;
index = (((a*(key)+b) % prime) % size) ;
index = index % size ;
return index;
}

bool HF :: insert (int ID,char* Name,char* Address,int Age,double GPA)
{
int i ;
NODE * n;
n = new NODE;
n -> ID = ID;
n -> Address = Address;
n -> Name = Name;
n -> Age = Age;
n -> GPA = GPA;
n -> next = NULL;
i = findindex(ID);
if ( HT[i] == NULL)
{
HT[i] = n;
}
else
{
n -> next = HT[i];
HT[i] = n;
}
count ++ ;
return true;
}

bool HF ::retrieve (int & key,char* & Name,char * &Address,int & Age,double & GPA)
{
int i ;
NODE *p;
i = findindex(key);
if ( HT[i] == NULL)
{
return false;
}
else
{
p = HT[i];
if ( HT[i] -> ID == key)// here is the break point
{
key = p-> ID ;
Name = p-> Name ;
Address = p-> Address ;
Age = p-> Age;
GPA = p-> GPA ;
return true ;
}
while ( p != NULL)
{
if ( p-> ID == key)
{
key = p-> ID ;
Name = p-> Name ;
Address = p-> Address ;
Age = p-> Age;
GPA = p-> GPA ;
return true ;
}
else
p = p-> next ;
}
}
return false;
}
bool HF :: remove (int key)
{

int i ;
NODE *p1 , *p2;
i = findindex(key);
if ( HT[i] == NULL)
{
return false;
}

else
{
p1 =p2 = HT[i];
if(HT[i] -> ID == key)
{
HT[i] = HT[i] -> next;
delete p2;
return true;
}


while ( p2 != NULL)
{
if ( p2 -> ID == key)
{
p1 -> next = p2 -> next ;
delete p2;

count --;
return true;
}
else
{

p1 =p2;
p2 = p2 -> next;

}
}


}
return false;

}

double HF :: GetLoadFactor()
{
double L;

L = (double) count/size ;
return L;
}

int main ()
{
double L;
int x,age;
char * name , *address;
double GPA;
HF UHashFunc1;
HF UHashFunc2( 11 , 7 , 3 , 0);

UHashFunc1.insert( 6 , "Ahmed" , "Jenin" , 20 , 3.5);
UHashFunc1.insert( 1 , "Sarah" , "Jenin" , 18 , 3.2);
UHashFunc1.insert(40 , "Mohammad" , "Tolkrem", 19 , 3.0);
UHashFunc1.insert(2 , "Ala'a" , "Jerusalem", 19 , 2.6);
UHashFunc1.insert(41 , "Raghad" , "Tolkrem", 19 , 1.6);
UHashFunc1.insert(80 , "Mohammad" , "Jenin", 22 , 2.7);
UHashFunc1.insert(83 , "Murad" , "Nablus", 18 , 3.7);
UHashFunc1.insert(44 , "Reem" , "Hebron", 19 , 2.9);
UHashFunc1.insert(50 , "Wajde" , "Qalqelya", 20, 1.7);
UHashFunc1.insert(42 , "Belal" , "Hebron", 20 , 3.4);
UHashFunc1.insert(3 , "Ahmed" , "Nablus", 21 , 1.9);
UHashFunc1.insert(84 , "Haitham" , "Nablus", 21 , 3.1);


cout <<"enter the ID you want to retrieve"<<endl;
cin>>x;
if(UHashFunc1.retrieve(x,name,address,age,GPA))
{
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
}
else
cout<<"NOT FOUND"<<endl;

cout <<"enter the ID you want to retrieve"<<endl;
cin>>x;
if(UHashFunc1.retrieve(x,name,address,age,GPA))
{
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
}
else
cout<<"NOT FOUND"<<endl;
L=UHashFunc1.GetLoadFactor();
cout << "The current load factor is : " << L <<endl;
UHashFunc1.remove(42);
L=UHashFunc1.GetLoadFactor();
cout << "The current load factor is : " << L <<endl;
x=84;
UHashFunc1.retrieve(x,name,address,age,GPA);
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
x=1;
UHashFunc1.retrieve(x,name,address,age,GPA);
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
x=50;
UHashFunc1.retrieve(x,name,address,age,GPA);
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;

cout << "Enter The ID you want to remove"<<endl;
cin>>x;
if(UHashFunc1.remove(x))
{
L=UHashFunc1.GetLoadFactor();
cout << "The current load factor after removing a record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}

if(UHashFunc1.remove(2))
{
L=UHashFunc1.GetLoadFactor();
cout << "The current load factor after removing a record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}
UHashFunc1.insert( 45 , "Amjad" , "Nablus" , 19 , 2.0);
L=UHashFunc1.GetLoadFactor();
cout << "The current load factor after adding a record is : " << L <<endl;
if(UHashFunc1.remove(80))
{
L=UHashFunc1.GetLoadFactor();
cout << "The current load factor after removing the record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}
if(UHashFunc1.remove(50))
{
L=UHashFunc1.GetLoadFactor();
cout << "The current load factor after removing the record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}

UHashFunc2.insert( 5 , "Ahmed" , "Jenin" , 20 , 3.5);
UHashFunc2.insert( 1 , "Sarah" , "Jenin" , 18 , 3.2);
UHashFunc2.insert(9 , "Mohammad" , "Tolkrem", 19 , 3.0);
UHashFunc2.insert(2 , "Ala'a" , "Jerusalem", 19 , 2.6);
UHashFunc2.insert(8 , "Raghad" , "Tolkrem", 19 , 1.6);
UHashFunc2.insert(100 , "Mohammad" , "Jenin", 22 , 2.7);
UHashFunc2.insert(50 , "Murad" , "Nablus", 18 , 3.7);
UHashFunc2.insert(23 , "Reem" , "Hebron", 19 , 2.9);
UHashFunc2.insert(40 , "Wajde" , "Qalqelya", 20, 1.7);
UHashFunc2.insert(17 , "Belal" , "Hebron", 20 , 3.4);
UHashFunc2.insert(3 , "Ahmed" , "Nablus", 21 , 1.9);
UHashFunc2.insert(7 , "Haitham" , "Nablus", 21 , 3.1);

cout <<"enter the ID you want to retrieve from the 2nd Func"<<endl;
cin>>x;
if(UHashFunc2.retrieve(x,name,address,age,GPA))
{
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
}
else
cout<<"NOT FOUND"<<endl;

cout <<"enter the ID you want to retrieve from the 2nd Func"<<endl;
cin>>x;
if(UHashFunc2.retrieve(x,name,address,age,GPA))
{
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
}
else
cout<<"NOT FOUND"<<endl;

L=UHashFunc2.GetLoadFactor();
cout << "The current load factor is : " << L <<endl;
UHashFunc2.remove(2);
L=UHashFunc2.GetLoadFactor();
cout << "The current load factor is : " << L <<endl;
x=5;
UHashFunc2.retrieve(x,name,address,age,GPA);
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
x=1;
UHashFunc2.retrieve(x,name,address,age,GPA);
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;
x=50;
UHashFunc2.retrieve(x,name,address,age,GPA);
cout << "ID:"<<x<<endl;
cout << "Name:"<<name<<endl;
cout << "Address:"<<address<<endl;
cout << "Age:"<<age<<endl;
cout << "GPA:"<<GPA<<endl;

cout << "Enter The ID you want to remove from the 2nd Func"<<endl;
cin>>x;
if(UHashFunc2.remove(x))
{
L=UHashFunc2.GetLoadFactor();
cout << "The current load factor after removing a record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}

if(UHashFunc2.remove(2))
{
L=UHashFunc2.GetLoadFactor();
cout << "The current load factor after removing a record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}
UHashFunc2.insert( 45 , "Amjad" , "Nablus" , 19 , 2.0);
L=UHashFunc2.GetLoadFactor();
cout << "The current load factor after adding a record is : " << L <<endl;
if(UHashFunc2.remove(100))
{
L=UHashFunc2.GetLoadFactor();
cout << "The current load factor after removing the record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}
if(UHashFunc2.remove(9))
{
L=UHashFunc2.GetLoadFactor();
cout << "The current load factor after removing the record is : " << L <<endl;
}
else
{ cout << "NOT Exist"<<endl;}


cin>>x;



return 0;
}

断点时没有构建错误只有这些错误

First-chance exception at 0x009437bd in Hash functions.exe: 0xC0000005: Access violation reading location 0x00000001. Unhandled exception at 0x009437bd in Hash functions.exe: 0xC0000005: Access violation reading location 0x00000001. First-chance exception at 0x009437bd in Hash functions.exe: 0xC0000005: Access violation reading location 0x00000001. The thread 'Win32 Thread' (0x1e40) has exited with code -1073741510 (0xc000013a). The program '[788] Hash functions.exe: Native' has exited with code -1073741510 (0xc000013a).

最佳答案

我能够轻松重现您遇到的错误。您有一个 HF 的构造函数,它采用如下参数:

HF :: HF ( int n , int p , int a, int b)
{
size = n;
prime = p;
a = a;
b = b;

如你所见,参数名称 a 和 b 与成员变量名称完全相同。因此 HF::a 和 HF::b 永远不会被赋值。因此它们总是未初始化并且包含垃圾。因此,除了随机值之外,您什么也得不到,而您尝试执行的所有散列操作结果都不起作用。

您应该将参数名称更改为不同的名称。也许用大写字母说:

HF :: HF ( int n , int p , int A, int B)
{
size = n;
prime = p;
a = A;
b = B;

一旦我这样做了,它就解决了所有的内存损坏错误,并且它运行完了就好了。

关于c++ - 我收到此错误 "Unhandled exception at 0x009437bd in Hash functions.exe: 0xC0000005: Access violation reading location 0x00000001",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com