首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助完成半复杂的C++分配

帮助完成半复杂的C++分配
EN

Stack Overflow用户
提问于 2009-09-01 18:43:34
回答 7查看 525关注 0票数 5

我肯定这是个很简单的问题,但我很感谢你的帮助。:)

下面是.h文件中的变量:

代码语言:javascript
复制
map<int, map<int, map<int, CString>*>*> batch;

这里我正在尝试分配一个值:

代码语言:javascript
复制
((*((*(batch[atoi(transnum)]))[1]))[atoi(*docnum)]) = page;

我添加了一些额外的括号,同时我试图找出这一点,以确保副厨师是按正确的顺序处理-不幸的是,它仍然不能工作。运行这一行时,我的应用程序就会崩溃。我已将其包装在try {} catch {}中,但似乎没有引发任何异常。我不经常使用C++,我想知道是否有人能告诉我我做错了什么。

,这是我想要建立的关系:

事务号(整数)的列表,需要按键排序。

对于每个事务编号,我有两种类型的文档、支付和发票(数据结构中分别用0和1表示的桶)。

在每个类型的桶中,可以有一个或多个文档__,这些文档需要按id (docid)排序。

每个docid链接到一个字符串,该字符串由文件系统上以逗号分隔的文件列表组成,以供处理。

如果你认为有一个更好的数据结构可以使用,我会有兴趣听到它。

编辑:--我知道有很多更好的方法可以做到这一点。在这种情况下,我收到了一堆可怕的MFC满是C++的代码,并告诉我昨天做了一些事情。它基本上可以归结为获取数据结构,加载数据结构,然后将其输出到其他地方。当我问这个问题的时候,我只是想尽快解决这个问题。不过,我很感谢你的设计建议。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-01 18:46:40

std::map的工作方式是,如果节点还不存在,它将分配要引用的节点。这意味着除非您分配子映射并将它们插入到supermap中,否则您将得到指向您不拥有的内存的指针。在那个时候,当你试图写到那个记忆时,你会崩溃。

映射需要堆分配吗?如果没有,可以将类型更改为:

代码语言:javascript
复制
map<int, map<int, map<int, CString> > > batch; // don't forget the spaces

你的电话可以是:

代码语言:javascript
复制
batch[atoi(transnum)][1][atoi(*docnum)] = page;
票数 17
EN

Stack Overflow用户

发布于 2009-09-01 18:53:39

首先,typedef这些东西,它变得容易得多:

代码语言:javascript
复制
typedef std::map<int, CString> page_map;
typedef std::map<int, page_map> document_map;
typedef std::map<int, document_map> batch_map;

batch_map batch;

注意,与动态分配相比,您几乎总是更喜欢使用他的堆栈。第二,你做的太多了!

代码语言:javascript
复制
int transNumber = atoi(transnum);
int docNumber = atoi(*docnum); // why is docnum a pointer?

batch[transNumber ][1][docNumber] = page;

现在,如果您需要调试,您可以很容易地检查这些值,并且更容易看出您会在哪里出错。

我认为,有了更多的信息,我们可以使这一工作更加简单。我想不出你到底为什么需要这样的东西。

票数 13
EN

Stack Overflow用户

发布于 2009-09-01 18:45:08

这条线太复杂了。

您需要将其分解为较小的部分,将每个部分转换为一个指定的变量。

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

https://stackoverflow.com/questions/1363990

复制
相关文章

相似问题

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