Как объясняет вопрос, я создаю динамически распределенный массив структур (как я назвал struct Desk *) в моем C-коде. В основной функции я даю номера int id в полях «int deskId». Когда я пытаюсь прочитать их идентификаторы внутри функции main, код работает, как и ожидалось. С другой стороны, если я пытаюсь прочитать их идентификаторы за пределами основного (как в коде ниже), это дает ошибку сегментации (ядро сбрасывается). Я даю проблемный код ниже. Как вы видите, я обратил внимание на адрес параметра массива (т.е. указатель на фактический массив), чтобы я мог прочитать фактическое содержимое массива, а не локальную копию.
Заранее спасибо.
#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;
}