检查 NULL 指针不适用于 char 指针

Check for NULL pointer doesn't work for char pointer

我知道这样问肯定很傻,但我的 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

我想念某事吗?

您声明了一个具有静态存储持续时间的指针数组。

static char *sys_efile[FILE_PATH_SIZE];

所以数组的所有元素都被隐式初始化为null-pointers。但是数组本身不能隐式转换为空指针,因为它占用内存。所以这个声明

if (sys_efile == NULL)

将始终评估为 false。

要么实际上要声明一个字符数组而不是指针数组,例如

static char sys_efile[FILE_PATH_SIZE]; // 100

然后你可以这样写

// issue_main.c
#include "issue.h"

if ( *sys_efile == '[=13=]' )
    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);