首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用嵌套在结构数组中的映射数组?

如何使用嵌套在结构数组中的映射数组?
EN

Stack Overflow用户
提问于 2022-01-14 06:50:22
回答 1查看 49关注 0票数 0

下面是创建包含map.My数组的结构数组的代码,问题是如何向映射中添加新值?以及如何将值更新为退出键?

代码语言:javascript
运行
复制
struct Line {
        map<int, vector<float>> *con_inf;
        float *points_x; // Array
        float *points_y; // Array
        int points_num;
    };
void update_map(int points_length) {
    struct Line *line_struct = NULL;
    line_struct = (struct Line *)malloc(sizeof(int) *points_length);
    for (int line_struct_idx = 0; line_struct_idx < points_length; line_struct_idx++) {
        line_struct[line_struct_idx].con_inf = (map<int, vector<float>> *) malloc(sizeof(int) *points_num);
        line_struct[line_struct_idx].points_x = (float *) malloc(sizeof(int) *points_num);
        line_struct[line_struct_idx].points_y = (float *) malloc(sizeof(int) *points_num);
        line_struct[line_struct_idx].points_num = points_num;
    }
}

我使用下面的代码来确认不存在的键exits.True。

代码语言:javascript
运行
复制
if (line_struct[cur_line_idx].con_inf[cur_point_idx].count(con_line_idx) == 0) {
    // add value
} else {
    // update value
}

但有时,不明显不存在的work.Something将得到错误结果(均值存在).When的代码将更新值,我将得到分段错误(内核转储)。

EN

回答 1

Stack Overflow用户

发布于 2022-01-14 07:08:17

line_struct = (struct Line *)malloc(sizeof(int) *points_length);

这显然是错误的。您正在分配Line结构的数组,但出于某种原因使用了sizeof(int)而不是sizeof(Line)。使用这样的数组显然是一种未定义的行为,因此难怪您会被分割为错误。

首先,最好通过使用std::vector来避免对数组使用直接内存分配。

辅助malloc只是一个内存分配。使用它来创建动态对象(比如std::map)是一个非常糟糕的想法(而且UB也是如此)--不会运行构造函数,因此结果对象将处于不确定状态。如果您确实必须手动管理内存,请使用new/delete运算符,或者更好的智能指针std::unique_ptr/std::shared_ptr

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70706948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档