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