繁体   English   中英

当我尝试读取动态分配的数组内容时,为什么我的C代码给我“ segmentation fault”错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM