0

こんにちは、変数をファイルから int 配列に読み込もうとしているので、変数を Struct 配列に格納できます。数値はcurLinks配列に正しく保存されますが、curLinks配列をcurNodes.nodesに渡そうとしても機能せず、(テストするために)印刷しようとするとゴミの数値が印刷されます。どんな助けでも素晴らしいでしょう。

struct nodeInfo* getTopology(FILE *file){
    int totLinks=0;
    fscanf(file, "%d", &nodeCount);
    struct nodeInfo netTopo[nodeCount];

    // How many links does node have
    for (int id=0; id<nodeCount; id++){
        struct nodeInfo curNode;
        curNode.n=id;
        fscanf(file, "%d", &totLinks);
        int curLinks[totLinks];
        for(int i=0; i<totLinks; i++){
            int digit=0;
            fscanf(file, "%d", &digit);
            curLinks[i] = digit;
        }
        curNode.nodes = curLinks;

        netTopo[id] = curNode;
    }
    for (int id=0; id<nodeCount; id++){
        for (int j=0; j<3; j++){
            printf("%d ", netTopo[id].nodes[j]);
        }
    }

    return netTopo;
}
4

2 に答える 2

1

最初の-loopcurLinksで複数の時間を定義しますfor

int curLinks[totLinks];

そして、それを満たした後、それを設定しようとしますが、ループnodeinfoの次の反復にfor入ってcurLinks再び満たされるとすぐに、以前のメモリcurLinksは範囲外になり、値を読み込んだと思われるメモリ常駐は実際には何でも埋めることができます -未定義の動作

構造体を定義する方法を教えていただければnodeInfo、適切に行う方法を示すことができるかもしれません。

例:あなたが定義すると仮定します

struct nodeinfo {
    int *nodes;
};

それで

struct nodeInfo* getTopology(FILE *file)
{
    int id, digit=0, totLinks=0;
    fscanf(file, "%d", &nodeCount);
    struct nodeInfo netTopo[nodeCount];

    // How many links does node have
    for (id=0; id<nodeCount; id++){

        fscanf(file, "%d", &totLinks);

        netTopo[id].nodes = malloc(totLinks * sizeof(int));
        if (netTopo[id].nodes==NULL)
            printf("Error allocating memory\n");

        for(i=0; i<totLinks; i++) {
            fscanf(file, "%d", &digit);
            netTopo[id].nodes[i] = digit;
        }
    }

    // Free the allocate memory
    for (id=0; id<nodeCount; id++){
         free(netTopo[id].nodes);
    }

    return netTopo;
}
于 2013-10-12T03:15:48.613 に答える