c++ - 尝试将指针分配给结构时程序崩溃

标签 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;
}

最佳答案

这样做:

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";
}

同样,如果您的意图是键/值映射,您可以简单地使用 std::map按照 M.M 或 std::unordered_map 的建议

关于c++ - 尝试将指针分配给结构时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39563745/

相关文章:

c++ - 虚拟析构函数和 delete 关键字

c - 将指向结构数组的指针传递给函数

Swift 结构项值不随函数改变

c++ - 关于写操作系统的问题

c - C 语言的生命游戏问题

c++ - C/C++ 编译器如何在头文件中找到原型(prototype)的定义?

c++ - 将指针设置为一个值加上一个单独的值

c - 为什么我的答案是 0.00.. 混淆如何将 int 转换为 float 结构

c++ - NaN 何时不在 C++ 中传播?

c# - 创建一个你可以在 RxCpp 中取消订阅的 Observable