1

いつものように、あなたの時間と助けに感謝します! ここで何が起こっているのかわかりませんが、おそらく明らかなことなので、他の人に見てもらいたいと思いました.

これは私のコードです。今実行すると、指定された名前のノードのアドレスが文字列として検索されます。次に、このノード オブジェクトのアドレスを返します。場合によっては(ほとんど)正常に動作しますが、他の実行ではセグメンテーション違反が発生します。誰でも理由がわかりますか?

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();
}
4

1 に答える 1

1

関数の 'temp'Node* ManipulateArray::findMemAddress(string nodeName)が初期化されていません。関数int main()では、逆参照する前に「開始」の値を確認する必要があります。うまくいくことを願っています!

于 2012-11-10T00:56:26.367 に答える