在构造函数中创建一个字符串数组并在主函数中使用它

UniBoring

我是散列的新手,所以我想创建一个包含字符串数组的散列表。它在类本身中工作,但是当我尝试在类之外使用字符串数组时,它崩溃了。我的构造函数或我认为的数组有些奇怪。

我把 main.cpp 中的代码粘贴到构造函数中,它没有问题。控制台可以显示我的阵列。但是当我尝试在 main.cpp 中使用 getArray 函数时它崩溃了。

哈希表.h

class hashtable
{
    public:
        hashtable();
        void remove(string);
        int hashfunction(string str);
        string* getArray();
    private:
         int table_size;
         string* T;
};

哈希表.cpp

hashtable::hashtable()
{
    int table_size = 10;
    elemts_in_array = 0;
    string array[10];

// Im adding some elements to test it. In final Version i will delete the next two lines.
    array[0]="start";
    array[9]="end";

    T = array;

// now I am testing if my function string* getArray() is working, and it's working when i dont use it in main.cpp

    string* arraytest = getArray();
     for (int i=0; i< 10;i++)
     {
         cout << i << " - " << arraytest[i]<< endl;
     }
}


/////////// getArray function
string* hashtable::getArray()
{
    return T;
}

主程序

int main()
{
    hashtable table;
    string* array = table.getArray();
    for (int i=0; i< 10;i++)
    {
        cout << i << " - " << array[i]<< endl;
    }
    return 1;
}

当我只创建一个名为 hashtable 的对象时,它的工作没有任何问题,但是当我创建一个对象并且我想通过我的 getArray 函数将数组交给 main.cpp 时,它崩溃了,我真的不知道为什么。

迈尔斯·布德内克

arrayhashtable的构造函数末尾超出范围T指向无效内存。如果您希望 指向的数组T继续存在于hashtable的构造函数范围之外,则需要动态分配。或者更好的是,使用std::vector<std::string>

class hashtable
{
    public:
        hashtable()
            : T{10}
        {
            T[0] = "start";
            T[T.size() - 1] = "end";

            for (int i = 0; i < T.size(); ++i)
            {
                std::cout << i << " - " << T[i] << '\n';
            }
        }

        std::vector<std::string>& getArray()
        {
            return T;
        }

        void remove(std::string);
        int hashfunction(std::string str);

    private:
        std::vector<std::string> T;
};

int main()
{
    hashtable table;
    std::vector<std::string>& array = table.getArray();
    for (int i = 0; i < array.size(); ++i)
    {
        std::cout << i << " - " << array[i] << '\n';
    }
}

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在构造函数中浅拷贝一个字符串数组

java将字符串数组放入另一个字符串数组构造函数中

使用 exec() 函数创建一个字符串,一个类的名称?(Python)

取一个字符串变量并在“ IN”语句中使用

从函数接收一个字符串数组并找出它的长度

如何将一个字符串从 1 个函数输入到其他 2 个函数中,并在 python 中打印?

使用日期函数创建一个字符串,在日期和月份前添加零

在javascript中使用forEach创建一个字符串

在函数中创建数组,并在另一个函数中使用它

在C中从char数组创建一个字符串

从对象数组中的元素创建一个字符串

如何在 PostgreSQL 函数中声明一个字符串?

从C中的函数返回一个字符串

在 CVXR 中为目标函数传递一个字符串

在系统函数中输入一个字符串

从React中的函数返回一个字符串而不是html

为什么最后一个字符是“?” 在这个字符串函数中

使用 kotlin 在函数内返回一个函数(返回一个字符串)

我如何编写一个函数来从数组形成一个字符串?

使用Lo在另一个字符串中使用AND搜索字符串数组

使用数组和foreach循环从另一个字符串中获取一个字符串

如何从字符串数组或arraylist创建一个字符串?

函数包含特定字符串返回一个字符串

JavaScript 如何创建一个函数,该函数返回一个字符串,其中包含字符在字符串中出现的次数

在C#中为SQL创建一个字符串,该字符串包含存储过程中的函数

连接一个函数和一个字符串

不使用内置函数将一个字符串中的字符替换为另一个字符串

如何在PySpark中创建一个udf并返回一个字符串数组?

我想过滤一个字符串,并使用php创建一个数组