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