包含指向结构数组指针的C结构数组

包含指向结构数组指针的C结构数组,c,arrays,struct,dynamic-memory-allocation,C,Arrays,Struct,Dynamic Memory Allocation,这里有点复杂。我试图模拟一个页表,它涉及很多数据结构——特别是我需要创建一个结构数组,其中包含指向其他结构数组的指针(因为我在定义时不知道它们需要多长时间)。我试图打印出我从一个文件(我已经验证im解析正确)中提供的输入,但它总是给出错误的输出 第二个问题是,有没有更好的方法来实现这一切?请记住,我以后需要将这些结构传递到函数中,所以我认为动态内存是最佳的 typedef struct PROCESS { int num_vmas; int pid; struc

这里有点复杂。我试图模拟一个页表,它涉及很多数据结构——特别是我需要创建一个结构数组,其中包含指向其他结构数组的指针(因为我在定义时不知道它们需要多长时间)。我试图打印出我从一个文件(我已经验证im解析正确)中提供的输入,但它总是给出错误的输出

第二个问题是,有没有更好的方法来实现这一切?请记住,我以后需要将这些结构传递到函数中,所以我认为动态内存是最佳的

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
的定义之后。