【发布时间】:2012-11-10 00:37:01
【问题描述】:
一如既往地感谢您的时间和帮助!不知道这里发生了什么,但可能很明显,所以我想我应该让其他人看看。
这是我的代码。现在 run 查找具有指定名称的节点的地址作为字符串。然后返回这个节点对象的地址。有时它工作正常(大部分)但其他运行给我一个分段错误。谁能看出原因?
class ManipulateArray
{
public:
Node* formArray();
Node* findMemAddress(string);
private:
GetFileInfo g;
};
Node* ManipulateArray::formArray()
{
Node *list = new Node[48];
string null = "*";
for(int i = 0; i<48; i++)
{
for(int j = 0; j<6; j++)
{
string info = g.returnInfo(i,j);
switch(j)
{
case 0:
list[i].setNodeName(info);
break;
case 1:
if(info.compare(null) == 0)
{list[i].getAttachedNode(j) = 0;}
break;
}
}
}
return list;
}
Node* ManipulateArray::findMemAddress(string nodeName)
{
Node* memoryAddress = 0;
Node* temp;
for(int i = 0; i<48; i++)
{
string name = temp[i].getNodeName();
temp = formArray();
if(name.compare(nodeName) == 0)
{
memoryAddress = &temp[i];
break;
}
}
return memoryAddress;
}
int main()
{
ManipulateArray z;
//Node *start;
//Node *finish;
Node* start;
start = z.findMemAddress("F1");
cout << start->getNodeName();
}
【问题讨论】:
-
这是你的问题:stackoverflow.com/questions/6441218/…。它不一致的原因是它会导致未定义的行为。
-
你能确定 seg 故障发生在哪条线上吗?您可以使用调试器吗?您是否尝试过注释/注释代码行以查看哪些似乎有效/哪些崩溃?
-
@TheNodeCommode,是的,问题实际上是
findMemAddress的最后一行 (})。我发布的链接中解释了原因。 -
代码中是不是缺少了什么?
string name = temp[i].getNodeName();行正在访问“temp”,这是一个未初始化的指针。 -
@chris : 不完全...
temp未初始化。从函数返回指针不是问题,返回自动存储的本地地址即可。