您好我正在尝试将文件中的变量读入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;
}
答案 0 :(得分:1)
您在第一个curLinks
- 循环
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;
}
答案 1 :(得分:0)
我认为在这种情况下你应该使用指针和“malloc”来从堆中分配内存。