【发布时间】:2012-04-06 19:41:07
【问题描述】:
我试图完全重新表述这个问题。情况如下:
class Departure {
private :
unsigned int supply;
public :
Departure(int);
~Departure();
int getSupply() {
return supply;
};
};
class Route {
private :
Departure* departure;
public :
Departure& getDeparture() {
return *departure;
};
};
class Plan {
private :
std::map<Route*, double> quantities;
public :
void addRoute(Route& rt) {
quantities.insert(std::pair<Route*,double>(&rt,0));
};
void createSolution() {
std::map<Route*, double>::iterator it;
for(it = quantities.begin(); it != quantities.end(); ++it) {
it->second = it->first->getDeparture().getSupply();
};
};
添加路线后 - 我已经检查过,它工作正常,我得到一个段错误,从我的试验和错误到现在位于 it->first->getDeparture().getSupply() 调用中。任何解释为什么?
【问题讨论】:
-
向我们展示如何定义和填充
quantities。 -
在 C++ 中使用指针通常是一个非常糟糕的主意。
-
@KerrekSB 什么?你能澄清一下最后的评论吗?
-
@Lirik:这在 SO 上一遍又一遍地出现。多花几天时间,我相信某处会有更实质性的帖子。或搜索有关该主题的一些过去的帖子。基本上,C++ 有比指针更好、更惯用的处理动态对象的工具,而且动态对象一开始就很少需要。
-
@Lirik 这仅适用于带有遗留元素的代码。指针在现代 C++ 代码中已经过时了。对于任何在 2012 年编写新代码的人来说,除了与旧代码交互之外,我很难看到指针在哪些地方实际上是有用或可取的。新的 C++11 标准使 C++ 成为一种几乎完全内存安全的语言,现在您可能更可能在 C# 和 Java 等托管语言中比在 C++ 代码中泄漏资源。 (不幸的是,仍然会编写不安全的代码,因为许多 C++ 程序员仍然“卡”在 1990 年代)
标签: c++ iterator segmentation-fault