我在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)时,边缘数组中没有合理的数据(超出范围?)。
我想我在这里搞混了一些东西,但我更希望我能在不诉诸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点以后编码,没有什么好的结果!
发布于 2012-10-24 13:19:44
欢迎来到C++!用于创建类实例( C++中的结构是所有字段都是公共的)的helper-方法称为构造函数。下面是如何使用构造函数创建edge类的实例。
class Edge {
public:
int position[4];
int average;
Edge();
};
Edge::Edge() //constructor
{
position[0] = 1;//fill the rest of the edge array in the same manner
average = 10;
}
int main()
{
Edge* myEdge = new Edge(); //constructor called
Edge* myEdges[8];
for (int i = 0; i < 8; i++)
{
myEdges[i] = new Edge();
}
return 0;
}https://stackoverflow.com/questions/13049769
复制相似问题