gpt4 book ai didi

c++ - 未声明的数组元素缺少 nullptr

转载 作者:行者123 更新时间:2023-11-28 02:31:46 27 4
gpt4 key购买 nike

我正在尝试制作一个基本的 HashMap。在将元素插入索引之前,我正在检查它是否存在于索引中。当我插入第一个元素时,它说该位置已经存在一个元素。我已经通过调试器,我的所有值都符合预期,map[hash] 除外。我期待一个 nullptr,但它不会出现。 map[hash] 具有以下值:

-       map[hash]   0xcdcdcdcd {key=??? value={...} next_element=??? }  HashElement *

有人可以向我解释一下我在这里的误解吗? HashMap.cpp第 21 行 出现意外结果。相关代码如下:

HashMap.h

#pragma once
#include <string>

#include "HashElement.h"

class HashMap
{
private:
HashElement **map;
int size;
public:
HashMap(int);
~HashMap();
int GetHash(int);
void Put(int, std::string);
};

HashMap.cpp

#include "HashMap.h"

#include <string>

HashMap::HashMap(int _size)
{
size = _size;
map = new HashElement*[size];
}

HashMap::~HashMap()
{
}

int HashMap::GetHash(int _key){
return _key % size;
}

void HashMap::Put(int _key, std::string _value){
int hash = GetHash(_key);
if (!map[hash]){ //Anticipated to be nullptr on first Put, but it skips to else
map[hash] = new HashElement(_key, _value);
}
else{
HashElement *lastElement = map[hash];
while (lastElement->next_element){
lastElement = lastElement->next_element;
}
lastElement->next_element = new HashElement(_key, _value);
}
}

HashElement.h

#pragma once

#include <string>

class HashElement
{
private:
int key;
std::string value;
public:
HashElement(int, std::string);
~HashElement();
HashElement *next_element;
int get_key();
std::string get_value();
};

HashElement.cpp

#include "HashElement.h"

HashElement::HashElement(int _key, std::string _value)
{
key = _key;
value = _value;
}

HashElement::~HashElement()
{
}

int HashElement::get_key(){
return key;
}

std::string HashElement::get_value(){
return value;
}

最佳答案

map[hash] 不是 nullptr 因为您还没有将它初始化为这样。

map = new HashElement*[size];

map 数组中的每个元素在该行之后都会有一个随机值。

要修复此问题并将所有元素初始化为 nullptr:

map = new HashElement*[size]();
^^

关于c++ - 未声明的数组元素缺少 nullptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796698/

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