我在 C++ 中有一个新手问题。
我有一个Edge
定义如下的结构:
struct Edge {
int position[4];
int average;
};
现在我需要创建很多这样的结构,并为此创建了一个辅助方法,它根据一些参数创建这些结构的数组:
Edge* createEdges(int some_parameters){
Edge *edges = new Edge[8];
for(int i = 0 ; i < 8; i++){
Edge edge;
edge.position[0] = 1; //fill the rest of the edge array in the same manner
edge.average = 10;
edges[i] = edge;
}
return edges;
}
但是,当我现在打电话时:Edge *edges = createEdges(int some_parameters)
Edge 数组中没有合理的数据(超出范围?)。
我想我在这里混合了一些东西,但如果我可以在不诉诸数据结构的情况下完成这项工作,我会更喜欢vector
。这是处理这个问题的正常方式还是我应该自己声明边缘数组并将其传递给辅助方法来填充它?
编辑:
首先,我要感谢大家的评论/提示/提示/建议/......他们帮助我找到了我很容易忽略的问题。
在我看到代码应该可以工作的回复之后,我也测试了简化的代码(我应该在第一个地方做的事情),令人惊讶的是,它工作了!因此,我检查了为什么我的真实代码不起作用而简化版本起作用。
我的真实代码如下所示:
Edge* createEdges(int some_parameters){
Edge* edges = new Edge[8];
if(some_parameter != 0){
//create the edges as in my 1st snippet
return NULL; //doh, should return edges here !
} else {
return NULL;
}
}
我没有看到我只是返回错误值(NULL)的原因是因为调试器向我显示了一些0xf6f6f6
带有一些负值的地址edge.position
(我不太明白,它应该只是显示给我0x000000
,也许我是只是想象事物)。
总而言之,这是一个重要的教训,为什么在凌晨 3 点之后永远不要编码,不会有任何好处!