gpt4 book ai didi

c - 如何在循环中实例化新的结构实例

转载 作者:行者123 更新时间:2023-11-30 16:25:23 25 4
gpt4 key购买 nike

我试图每次用一个新的结构填充指向结构的指针数组。我遇到的问题是我的结构指针数组似乎充满了指向同一结构的指针。我习惯使用其他语言,我可以说 new 并且它调用一个构造函数来创建一个新的实例,因此您仍然可以使用相同的名称但获得新的地址。这是我的结构代码:

struct table_entry { 
_Bool valid; //probably not needed can just use check for null
_Bool mem;
int index; // will be number between 0-63
};
typedef struct{
int proc_id;
struct table_entry *pte[64];
} page_table ;

这里是我尝试创建一个新的 page_table 实例但无论如何都获得相同地址的地方:我认为问题出在第一行的前几行内,如果我尝试创建结构的新实例。

for (int i = 0; i < size; i++) {
if ((strcmp(words[i], "new") == 0)) {
page_table pt;
printf("address of pt:%d", (int) &pt);
pt.proc_id = atoi(words[i + 1]);
proceses[atoi(words[i + 1])] = &pt;
printf("new process: %s:%d\n", words[i],
proceses[atoi(words[i + 1])]->proc_id);
} else if ((strcmp(words[i], "switch") == 0)) {
printf("switching to process: %s\n", words[i + 1]);
int process = atoi(words[i + 1]);
page_table cur_pt = *proceses[process];
// change the current page table reference
printf("process ID%d: %d\n", process, cur_pt.proc_id);
} else if ((strcmp(words[i], "access") == 0)) {
// printf("accessing memory: %d\n", atoi(words[i + 1]) >> 10);
}
for (int i = 0; i <= size; i++) {
// printf("%s\n", words[i]);
}
}

我一直在寻找解决这个问题的最佳方法,但我不太确定我在寻找什么。我研究过匿名结构,也尝试过使用 malloc 分配内存。尽管我不确定我是否正确地执行了这些方法,但我似乎没有在这两种方法中取得成功。感谢您的帮助,如果您想查看其他内容或有任何疑问,请告诉我。

最佳答案

您遇到的问题是 pt 仅具有 block 作用域。在 block 的末尾,}pt不再存在。

if ((strcmp(words[i], "new") == 0)) {
page_table pt;
...
}

// pt Doesn't Exist Anymore

解决此问题的一种方法是使用 malloc 动态分配内存:

if ((strcmp(words[i], "new") == 0)) {
page_table *pt = malloc(sizeof(*pt));
...
}

应该注意的是,如果您在没有释放的情况下覆盖pt并丢失了以前的地址,您将遭受memory leak的影响。 .

关于c - 如何在循环中实例化新的结构实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53418417/

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