在頭文件:無法訪問結構數據
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 *'分配類型'contains'時的不兼容類型
上述錯誤由@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)那樣訪問它;' –
它會生成,但是當它運行到部分,它指出了一些內核堆棧問題。 – Babbit