C++ 试图将指针指定给结构时,程序崩溃

C++ 试图将指针指定给结构时,程序崩溃,c++,pointers,struct,C++,Pointers,Struct,我已经定义了一个结构,并希望初始化该结构的数组。程序执行并将值写入控制台,但随后崩溃,我不知道为什么,因为它没有给我任何错误消息。我相信我的错误是当我试图为结构赋值时,因为程序在没有的情况下运行良好,但我无法找出我做错了什么。我希望有人能帮我 struct Item{ char *key; char *val; }; int main() { char k[] = "key"; char v[] = "value"; struct Item **di

我已经定义了一个结构,并希望初始化该结构的数组。程序执行并将值写入控制台,但随后崩溃,我不知道为什么,因为它没有给我任何错误消息。我相信我的错误是当我试图为结构赋值时,因为程序在没有的情况下运行良好,但我无法找出我做错了什么。我希望有人能帮我

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];
您创建了指向结构项指针的指针数组。注意:在C++中,不需要将结构资格限定为结构对象。 创建的指针尚未引用任何有效对象,因此取消引用它们会产生未定义的行为。在初始分配之后,您可能需要遍历每个指针数组并创建元素。例如:

for(int i = 0; i < 3; i++){
    dict[i] = new Item[4]; //as an array, or
    //dict[i] - new Item();
}
同样,如果您的意图是一个关键/价值图,您可以按照M.M的建议使用,或者通过执行以下操作来使用:

struct Item **dict = new struct Item*[3];
您创建了指向结构项指针的指针数组。注意:在C++中,不需要将结构资格限定为结构对象。 创建的指针尚未引用任何有效对象,因此取消引用它们会产生未定义的行为。在初始分配之后,您可能需要遍历每个指针数组并创建元素。例如:

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

再次,如果你的意图是一个键/值映射,你可以简单地使用M。M的建议,或者使用STD:

::MAP可能是一个更好的现代C++等价于STD::MAP可能是一个更好的现代C++等价物。