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

curLinks您在第一个for循环中定义了多个时间

int curLinks[totLinks];

并且在您填写之后,您尝试在您的nodeinfo但是一旦for进入 -loop 中的下一次迭代并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 回答
0

在这种情况下,我认为您应该使用指针和“malloc”从堆中分配内存。

于 2013-10-12T03:32:27.487 回答