gpt4 book ai didi

c++ - 总线错误 c++ 使用小数组正确运行,使用大数组运行时错误

转载 作者:行者123 更新时间:2023-11-30 05:28:29 24 4
gpt4 key购买 nike

谁能帮帮我?当 hashSize 较小时,printAll()、listprintAll() 和 sizeLL() 可以正常工作,但不适用于大数字,例如数字 9973。

printAll() 和 hashStats() 都是类表中的方法,printALL() 调用 listprintAll() 和 hashStats() 从另一个结构调用 sizeLL()。

所有函数都可以在给定较小的 hashSize 的情况下正常工作。

对不起,这张照片让我很困惑。第一次来这里。我正在使用 MacBook 来完成这项工作。

在list.h中

struct Node{  

string key;
int value;

Node *next;

Node(const string &theKey, int theValue);

Node(const string &theKey, int theValue, Node *n);



};

typedef Node * ListType;

在表.h中

class Table {
public:

static const int HASH_SIZE = 9973; // a prime number

// create an empty table, i.e., one where numEntries() is 0
// (Underlying hash table is HASH_SIZE.)
Table();

// create an empty table, i.e., one where numEntries() is 0
// such that the underlying hash table is hSize
Table(unsigned int hSize);

unsigned int hashSize; // size of the hash table
ListType * data; // (used in hashCode method above)
}

在list.cpp中

void listprintAll(ListType list){

if(list ==NULL) {
cout << "[ ]" <<endl;
return;}
else{
Node * p=list;
while(p!= NULL){
cout << p->key << " " << p->value << ",";
p=p->next;
}
cout <<endl;
return;
}
}

int sizeLL(ListType list){

if(list ==NULL) {
return 0;}

else{
int count=0;
Node * p=list;

while(p!= NULL){
p=p->next;
count++;
}
return count;
}

在 Table.cpp 中

Table::Table() {
hashSize=HASH_SIZE;
data = new ListType[hashSize];

}


Table::Table(unsigned int hSize) {
hashSize=hSize;
data = new ListType[hashSize];

}


void Table::printAll() const {

for(int i=0;i<hashSize;i++){
listprintAll(data[i]);
}
}

void Table::hashStats(ostream &out) const {

out << "number of buckets: "<< hashSize <<endl;
int number = numEntriesOfTable();
out << "number of entries: "<< number <<endl;

int countN0=0;
int longest=0;
int temp;

if(number!=0){
for(int i=0;i<hashSize;i++){
temp=sizeLL(data[i]);
if(temp!=0){
countN0++;
if(temp > longest){
longest=temp;
}
}
}
}
out << "number of non-empty buckets: "<< countN0 << endl;
out << "longest chain : "<< longest << endl;





}

最佳答案

您正在为构造函数中的 data 分配内存,但没有对其进行初始化。这会使您的所有指针都带有不确定的值,这些值可能是 0/NULL,也可能是其他一些随机指针值。当您尝试取消引用这些时,您会遇到崩溃。

您需要使用循环、memset 或类似的方法将构造函数中分配的内存归零。

关于c++ - 总线错误 c++ 使用小数组正确运行,使用大数组运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819031/

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