包含指向结构数组指针的C结构数组
这里有点复杂。我试图模拟一个页表,它涉及很多数据结构——特别是我需要创建一个结构数组,其中包含指向其他结构数组的指针(因为我在定义时不知道它们需要多长时间)。我试图打印出我从一个文件(我已经验证im解析正确)中提供的输入,但它总是给出错误的输出 第二个问题是,有没有更好的方法来实现这一切?请记住,我以后需要将这些结构传递到函数中,所以我认为动态内存是最佳的包含指向结构数组指针的C结构数组,c,arrays,struct,dynamic-memory-allocation,C,Arrays,Struct,Dynamic Memory Allocation,这里有点复杂。我试图模拟一个页表,它涉及很多数据结构——特别是我需要创建一个结构数组,其中包含指向其他结构数组的指针(因为我在定义时不知道它们需要多长时间)。我试图打印出我从一个文件(我已经验证im解析正确)中提供的输入,但它总是给出错误的输出 第二个问题是,有没有更好的方法来实现这一切?请记住,我以后需要将这些结构传递到函数中,所以我认为动态内存是最佳的 typedef struct PROCESS { int num_vmas; int pid; struc
typedef struct PROCESS {
int num_vmas;
int pid;
struct VMA *vmalist;
} PROCESS;
typedef struct VMA {
int start_page;
int end_page;
int w_prctd;
int f_mapped;
} VMA;
PROCESS *pl[num_ps];
for (int i=0; i<num_ps; i++) {
PROCESS *proc = malloc(sizeof(PROCESS)); // Create individual process
int num_vmas = parse_num(inputptr);
VMA **vma_list = malloc(sizeof(VMA*) * num_vmas); // Create list of vmas
proc->num_vmas = num_vmas;
proc->pid = i;
proc->page_table = pagetable;
proc->vmalist = vma_list;
for (int j=0; j<num_vmas; j++) {
VMA *myvma = malloc(sizeof(VMA)); // Create individual vma
myvma = parse_vma(inputptr);
vma_list[j] = myvma; // Add VMA to list
}
pl[i] = proc; // Add process to list
}
printf("TESTING NOW:\n");
for (int i=0; i<num_ps; i++) {
printf("PID: %d\n", pl[i]->pid);
printf("Num VMAs: %d\n", pl[i]->num_vmas);
for (int j=0; j<pl[i]->num_vmas; j++) {
VMA *vma = pl[i]->vmalist[j];
printf("in-mem: %d %d %d %d\n", vma->start_page, vma->end_page,
vma->w_prctd, vma->f_mapped);
}
}
typedef结构进程{
int num_vmas;
int-pid;
结构VMA*vmalist;
}过程;
类型定义结构VMA{
int开始页面;
int end_页面;
内华人民共和国,;
int f_映射;
}VMA;
进程*pl[num_ps];
对于(int i=0;inum_vmas=num_vmas;
proc->pid=i;
proc->page_table=pagetable;
proc->vmalist=vma_列表;
对于(int j=0;jnum_vmas);
对于(int j=0;jnum_vmas;j++){
VMA*VMA=pl[i]>vmalist[j];
printf(“在内存中:%d%d%d%d\n”,vma->开始页面,vma->结束页面,
vma->w_prctd,vma->f_映射);
}
}
您需要解释什么是错误的。输入是什么(显示示例)、预期输出是什么以及您将获得什么输出(显示示例)。错误:当使用类型“struct VMA”初始化类型“struct VMA*”时,不兼容的类型使用&
运算符获取VMA结构的地址。到目前为止,您正在将一个结构本身分配给指针。VMA**VMA_列表
通常用于声明二维数组。其余代码不完整。page_选项卡le
不是流程的成员
。我可以看到的一点是流程
的定义必须在VMA
的定义之后。