深度复制(可能与指针相关)

时间:2016-11-25 10:24:05

标签: c++ pointers linked-list

所以我正在尝试深度复制我的HashTable。我的哈希表是一个填充链表的数组。 我已经编写了链表构造函数/复制构造函数/覆盖运算符,它们运行良好。

所以我编写了以下内容,但for循环中存在问题。

HashTable.cpp
HashTable::HashTable()
{

}
HashTable::HashTable(const HashTable & ht)
{
    bucketSize = ht.bucketSize;
    count = ht.count;
    LinkedList** table = new LinkedList*[ht.bucketSize];

    for (int i = 0; i < bucketSize; i++) {
        table[i] = new LinkedList(ht.table[i]);
    }

}

HashTable.h
class HashTable {
public:
    HashTable();
    HashTable(const HashTable& ht);
private:
    // Add your member variables and any private member functions here
    int bucketSize = defaultCapacity; //default is 101
    int count = 0;
    LinkedList table[defaultCapacity];
}

我怀疑它与指针有关,但没有错误信息,只有按下运行时弹出窗口:abort()已被调用。

1 个答案:

答案 0 :(得分:0)

在提供的源代码中,类和构造函数声明中都存在错误。为了更好地检测这些误解,最好在编译器解析它时提供源代码。

第一步 - 在class HashTable中,所有变量仅被声明且未初始化。

  

table变量必须存储LinkedList数组。它是一个   复制构造函数中声明的LinkedList **table;

class HashTable {
public:
    HashTable(void);
    HashTable(const HashTable& ht);
private:
    // Add your member variables and any private member functions here
    int bucketSize;
    int count;
    LinkedList **table;
};

第二步 - 默认构造函数HashTable(void);将使用DefaultCapacity参数。

  

在默认构造函数HashTable(void)中,创建了一个defaultCapacity数组   使用默认LinkedList() =空列表初始化。

HashTable::HashTable(void)
{
    bucketSize = defaultCapacity; //default is 101
    count = 0;
    table = new LinkedList*[bucketSize];
    for (int i = 0; i < bucketSize; i++) {
        table[i] = new LinkedList();
    }
}

第三步 - 复制构造函数HashTable(const HashTable & ht)创建克隆数组并复制item-LinkedList。

  

在复制构造函数中,每个项目都使用   LinkedList复制构造函数。

     

错误: LinkedList** table的本地声明会覆盖类声明。

HashTable::HashTable(const HashTable & ht)
{
    bucketSize = ht.bucketSize;
    count = ht.count;
    //LinkedList** table = new LinkedList*[ht.bucketSize];
    table = new LinkedList*[ht.bucketSize];

    for (int i = 0; i < bucketSize; i++) {
        table[i] = new LinkedList(ht.table[i]);
    }
}