【问题标题】:Occasional segmentation fault [closed]偶尔的分段错误[关闭]
【发布时间】: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 未初始化。从函数返回指针不是问题,返回自动存储的本地地址即可。

标签: c++ nodes


【解决方案1】:

函数Node* ManipulateArray::findMemAddress(string nodeName) 中的'temp' 尚未初始化。 在函数int main() 中,您应该在取消引用之前检查“start”的值。希望它有效!

【讨论】:

  • 是的,我这样做只是为了测试输出。我感谢所有帮助的人。问题虽然,我觉得我吹过这一点。为什么 temp 需要在堆上? temp 的内容不会改变,那么为什么每次运行的结果都会不同?因为它每次都选择不同的内存位置?
  • 请将完整代码粘贴到pastebin 等网站上并提供链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 2012-05-09
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2017-03-12
相关资源
最近更新 更多