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