正如问题所解释的那样,我在我的 C 代码中创建了一个动态分配的结构数组(我称之为 struct Desk*)。在主函数中,我在它们的“int deskId”字段中提供了 int id 编号。当我尝试在主函数中读取它们的 id 时,代码按预期工作。另一方面,如果我尝试在 main 之外读取它们的 id 内容(如以下代码所示),则会出现段错误(核心转储)错误。我在下面给出有问题的代码。如您所见,我注意给出数组参数的地址(即指向实际数组的指针),以便我可以读取数组的实际内容,而不是本地副本。 提前致谢。
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
struct Desk {
int deskId;
Queue deskQueue;
};
struct TaxPayer {
int id; // tax payer ID
float duration; // payment duration
};
//function to display the ids of the desks
int display (int desks, struct Desk** argsptr) {
int i=0;
while(i < desks) {
printf ("My argument's id is %d\n",argsptr[i]->deskId );
i++;
}
return 0;
}
int main (int argc, char *argv[]) {
int option_index = 0;
int p_num = 20;
int desk_num = 4;
int max_q_size = 3;
//initialize array of desks
struct Desk* desk_array = malloc(desk_num * sizeof(struct Desk));
for (int i= 0; i < desk_num; i++) {
queueInit(&desk_array[i].deskQueue, sizeof(struct TaxPayer));
desk_array[i].deskId = i;
}
display(desk_num, &desk_array);
free(desk_array);
return 0;
}
最佳答案
您将 desk_array
指针的地址传递给 display()
而不是指针本身。 display()
然后是读取指针,然后是指针之后的内存区域等等。你要做的是传递指针desk_array
,然后使用.
而不是函数内部的 ->
因为 [i]
取消引用 desk_array
。
int display (int desks, struct Desk* argsptr) {
int i=0;
while(i < desks) {
printf ("My argument's id is %d\n",argsptr[i].deskId );
i++;
}
return 0;
}
...
display(desk_num, desk_array);
关于c - 当我尝试读取动态分配的数组内容时,为什么我的 C 代码会出现 "segmentation fault"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55459294/