我正在尝试创建一个哈希映射来存储字符串中的字符。我似乎找不到导致错误“3 [main] a 8724 cygwin_exception::open_stackdumpfile: Dumping stack trace to a.exe.stackdump”的问题。我相信它在 hasher.cpp 中的某个地方,并且与分配值有关,但除此之外,我完全被难住了。任何帮助将非常感激!
我试过注释掉 main.cpp 的某些部分。当我简单地实例化名为“map”的哈希器时,代码就可以工作了。当我尝试初始化或打印时,会抛出错误。
主.cpp:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include "hasher.h"
using namespace std;
int main(void){
hasher *map = new hasher;
map -> initialize(map);
map -> printHash(map);
return 0;
}
hasher.cpp:
#include "hasher.h"
#include <iostream>
using namespace std;
hasher::hasher(){
}
void hasher::initialize(hasher *h){ //initialize all charachters to spaces
for(int i = 0; i < hasherSize; i++){
h -> arr[i] -> C = ' ';
}
}
void hasher::insert(hasher *h, char ins){
int addr;
int value = (int)ins; //value will be the ascii value of the char
addr = value / 7; //map the current character to the ascii value mod 7
node *curr = h -> arr[addr];
while(curr -> next != nullptr){
curr++;
}
curr -> next -> C = ins;
}
void hasher::del(hasher *h, char delChar){
}
bool hasher::inString(hasher *h, char se){
}
void hasher::printHash(hasher *h){
for(int i = 0; i < hasherSize; i++){
cout << h -> arr[i] -> C;
node *curr = h -> arr[i];
while(curr -> next != nullptr){
curr++;
cout << ", " << curr -> C;
}
cout << endl;
}
}
哈希.h:
#include "node.h"
#define hasherSize 40
using namespace std;
class hasher{
public:
node* arr[hasherSize];
hasher();
void initialize(hasher *H);
void insert(hasher *H, char ins);
void del(hasher *H, char del);
bool inString(hasher *H, char searchChar);
void printHash(hasher *H);
};
我相信所有标题/数据结构都是正确的(定义了一个节点和一个哈希映射,它是一个节点数组,每个节点都有一个 next 指针)。
提前感谢您的帮助!