В заголовочном файле:Невозможно получить доступ к данным STRUCT
typedef struct {
char* a;
int allowed;
struct suit {
struct t {
char* option;
int count;
} t;
struct inner {
char* option;
int count;
} inner;
} suit;
} contain;
typedef struct {
contain info;
} query_arg_t;
В модуле ядра,
// инициализировать
static const contain _vector = {
.a = "John",
.allowed = 1,
.suit = {
.t = {
.option = "ON",
.count = 7
},
.inner = {
.option = "OFF (*)",
.count = 7
}
}
};
Однако, как мы пытаемся:
query_arg_t q;
q.info = kmalloc(sizeof(_vector), GFP_KERNEL);
Мы получим эту ошибку: ошибка: несовместимые типы при присвоении типа «содержать» от типа «void» *
Вышеприведенная ошибка решается @SunEric и @Sakthi Kumar.
q.info = kmalloc(sizeof(_vector), GFP_KERNEL);
memcpy(&(q.info), &(_vector), sizeof(_vector));
Кажется, сейчас. Он строит, но когда он работает с этой частью, он утверждает, что стек ядра поврежден. после попытки выполнить:
printf("option: %s \n", q.info->suit.t.option);
printf("option: %s \n", q.info->suit.t.option);
[Обновлено: Решено]
@Sakthi Кумар решил ее:
//removing kmalloc
// commenting out: q.info = &_vector;
memcpy(&(q.info), &(_vector), sizeof(_vector));
printf("option: %s \n", q.info.suit.t.option);
printf("option: %s \n", q.info.suit.inner.option);
Спасибо, @Sakthi Kumar. Не могли бы вы также привести меня к следующему вопросу, указанному выше? – Babbit
@Babbit, поскольку 'info' является указателем, к которому вы должны получить доступ, например' printf ("option:% s \ n", q.info-> suit.t.option); ' –
Он строит, но когда он работает с этим part, он задает некоторую проблему стека ядра. – Babbit