我试图每次用新的结构填充指向结构的指针数组。我遇到的问题是结构指针数组似乎充满了指向相同结构的指针。我习惯于使用其他语言,在这些语言中我可以说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实例,但无论如何都获得相同的地址:如果我试图在其中创建新的struct实例,我认为问题出在第一行的前几行之内。 / p>
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分配内存。尽管我不确定自己是否正确地执行了这些方法,但似乎都没有找到成功的方法。 谢谢您的帮助,如果您想查看其他内容或有任何疑问,请告诉我。
答案 0 :(得分:0)
您遇到的问题是pt
仅具有块范围。在该块的末尾,}
,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
上写上free
并丢失了先前的地址,则会遭受memory leak的困扰。