我知道問這個問題一定很愚蠢,但是我if
檢查空指標的宣告似乎不起作用。代碼繼續,一旦我取消參考指標,就會發生錯誤。該代碼是內核代碼,如果這很重要的話。
// issue.h
static char *sys_efile[FILE_PATH_SIZE]; // 100
// issue_main.c
#include "issue.h"
if (sys_efile == NULL)
return -EFAULT;
file = filp_open(*sys_efile, O_RDWR, 0);
BUG: kernel NULL pointer dereference, address: 0000000000000000
[ 32.262950] #PF: supervisor read access in kernel mode
[ 32.262952] #PF: error_code(0x0000) - not-present page
我想念什么嗎?
uj5u.com熱心網友回復:
您宣告了一個具有靜態存盤持續時間的指標陣列。
static char *sys_efile[FILE_PATH_SIZE];
所以陣列的所有元素都被隱式初始化為空指標。但是陣列本身不能隱式轉換為空指標,因為它占用記憶體。所以這個說法
if (sys_efile == NULL)
將始終評估為假。
實際上,您要宣告一個字符陣列而不是指標陣列,例如
static char sys_efile[FILE_PATH_SIZE]; // 100
然后你可以寫例如
// issue_main.c
#include "issue.h"
if ( *sys_efile == '\0' )
return -EFAULT;
file = filp_open( sys_efile, O_RDWR, 0);
或者,如果您要使用指標陣列,則 if 陳述句應如下所示
static char *sys_efile[FILE_PATH_SIZE]; // 100
// issue_main.c
#include "issue.h"
if ( *sys_efile == NULL)
return -EFAULT;
file = filp_open(*sys_efile, O_RDWR, 0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470463.html
上一篇:為什么指標的資料型別應該與它所尋址的變數的資料型別相同?[復制]
下一篇:洗掉運算子的未定義行為