【发布时间】:2018-12-29 01:47:00
【问题描述】:
当我尝试在动态内存中初始化结构的二维数组时,我不断收到段错误。我知道 1D 结构数组在技术上是指向指针的指针,我认为 2D 结构数组也可以这样工作,但似乎可能不是?
代码:
typedef struct PTE {
unsigned int faddr:7;
unsigned int present:1;
unsigned int wp:1;
unsigned int mod:1;
unsigned int ref:1;
unsigned int pout:1;
unsigned int fmap:1;
} PTE;
void init_pte(PTE **pgtbl_l, int num_ps) {
// Initialize all fields to zero
for (int i=0; i<num_ps; i++) {
for(int j=0; j<64; j++) {
PTE *new_pte = malloc(sizeof(PTE));
pgtbl_l[i][j] = *new_pte;
new_pte->faddr = 0;
new_pte->present = 0;
new_pte->wp = 0;
new_pte->mod = 0;
new_pte->ref = 0;
new_pte->pout = 0;
new_pte->fmap = 0;
}
}
}
void print_pagetable(PTE **pgtbl_l, int num_ps) {
for (int i=0; i<num_ps; i++) {
printf("PT[%d]: ", i);
for (int j=0; j<64; j++) {
printf("faddr: %d pres: %d wp: %d mod: %d ref %d", pgtbl_l[i][j].faddr,
pgtbl_l[i][j].present, pgtbl_l[i][j].wp, pgtbl_l[i][j].mod,
pgtbl_l[i][j].ref);
}
}
printf("\n");
}
PTE *pgtbl_l[num_ps][64];
init_pte(pgtbl_l, num_ps);
print_pagetable(pgtbl_l, num_ps);
【问题讨论】:
-
请详细说明“结构的一维数组在技术上是指向指针的指针”。这不符合我的理解。也许显示一个“一维结构数组”的声明以供参考/比较,并将其与一个二维结构数组的声明、一个一维 int 数组和一个二维 int 数组进行对比。
-
我想如果你初始化一个结构数组并想要动态创建它,你必须将它初始化为
STRUCT *mystruct[10];并将其传递为 intmyfunc(**mystruct); -
@ThomasM 这是一个指向结构的指针的数组。