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

时间:2018-07-15 03:53:53

标签: c arrays struct dynamic-memory-allocation

这里有点复杂。我正在尝试模拟页表,它涉及许多数据结构-特别是我需要创建一个结构数组,其中包含指向其他结构数组的指针(因为在定义时我不知道它们需要多长时间)是)。我试图从文件中打印出我提供的输入(我已经验证了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);
    }
}

0 个答案:

没有答案