尝试分配指向结构

时间:2016-09-19 00:02:40

标签: c++ pointers struct

我已定义了一个结构,并希望初始化该结构的数组。程序执行并将值写入控制台但随后崩溃,我不知道为什么,因为它没有给我任何错误消息。我相信我的错误是当我尝试为结构赋值时,程序工作正常没有,但我无法弄清楚我做错了什么。我希望有人可以帮助我。

struct Item{
    char *key;
    char *val;
};


int main() {
    char k[] = "key";
    char v[] = "value";

    struct Item **dict = new struct Item*[3];
    dict[0]->key = k;
    dict[0]->val = v;

    cout << dict[0]->key << " "<< dict[0]->val << "\n";
    delete[] dict;
}

1 个答案:

答案 0 :(得分:4)

通过这样做:

struct Item **dict = new struct Item*[3];

您创建了指向struct Item指针的指针数组。 注意:在C ++中,您不需要struct限定条件来声明struct对象。

创建的指针尚未引用任何有效对象,因此取消引用它们会产生未定义的行为。好吧,在初始分配之后,您可能想要遍历每个指针数组并创建元素。例如:

for(int i = 0; i < 3; i++){
    dict[i] = new Item[4]; //as an array, or
    //dict[i] - new Item();
}

保存所有这些令人头疼的问题并使用std::vector,并使用std::string而不是char*

的雷区

今天,在C ++中,这就是你想要做的事情:

struct Item{
    std::string key;
    std::string val;
};


int main() {
    std::string k = "key";
    std::string v = "value";

    //auto dict = std::make_unique<Item[]>(3);    
    std::vector<Item> dict(3);
    dict[0].key = k;
    dict[0].val = v;

    std::cout << dict[0].key << " "<< dict[0].val << "\n";
}

如果您的意图是键/值地图,您可以根据M.M的建议使用std::map,或std::unordered_map