![](/img/trans.png)
[英]I'm not sure why my code in C is giving me a segmentation fault at free, any ideas?
[英]Why my C code is giving me “segmentation fault” error when I try to read dynamically allocated array contents?
正如问题所解释的,我正在C代码中创建一个动态分配的结构数组(如我所说的struct Desk *)。 在主函数中,我在它们的“ int deskId”字段中提供了int id号。当我尝试在主函数中读取其id时,代码将按预期工作。 另一方面,如果我尝试在主机之外读取它们的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);
argsptr[i]->deskId
访问struct Desk *
数组,但只有一个。 您需要(*argsptr)[i].deskId
。
或者,传递desk_array
而不是&desk_array
,将参数类型更改为struct Desk *
,并使用argsptr[i].deskId
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.