gpt4 book ai didi

c - 将结构传递给函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:25 24 4
gpt4 key购买 nike

嘿,当我将 Struct 数组传递给函数时,我不确定为什么;当我尝试访问它的成员时,它会打印随机数。在语句“printf("%d\n", netTopo[0].nodes[1]); 下方工作正常但我在函数中并尝试打印相同的数据,它打印了一堆随机数?不确定我做错了什么。

int main(int argc, char *argv[]) {

if (argc != 3){
printf("Incorrect command line arguments. Required 2 files.\n");
exit(-1);
}

FILE *netFile, *schFile; // put into a loop
netFile = fopen(argv[1], "r");
schFile = fopen(argv[2], "r");

int *sched = getSchedFile(schFile);

struct nodeInfo *netTopo = getTopology(netFile);
printf("%d\n", netTopo[0].nodes[1]);

int nodeSocks[nodeCount];
for (int i=0; i<nodeCount; i++){
nodeSocks[i]=getSocketNo();
}

get_elapsed_time(); // start clock

for (int i=0; i<nodeCount; i++){
if (fork()==0){
nodeExecution(i, nodeSocks, netTopo, sched);
exit(0);
}
}
}

void nodeExecution(int id, int nodes[], struct nodeInfo *netTopo, int *schd){
printf("%d\n", netTopo[0].nodes[1]);
......

最佳答案

所以你从 getTopology() 返回一个指向堆栈上局部变量的指针?这就是错误。

netTopo 在堆栈上,当您从 getTopology() 返回时,还有其他函数调用会重用存储 netTopo 的内存区域。该内存已修改,调用 nodeExecution() 时会得到不同的输出

添加:要解决此问题,您可以在 getTopology() 中分配内存:

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

....

关于c - 将结构传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com