繁体   English   中英

指针从C中的extern结构返回NULL

[英]Pointer returning NULL from extern structure in C

我在.h文件中定义了以下全局结构:

文件1.h

struct kobject_saved {
struct kobject* kobject;
}
extern struct kobject_saved *ksaved;

文件1.c

#include <file1.h>

struct kobject_saved *ksaved = kmalloc(sizeof(struct kobject_saved), GFP_KERNEL);
ksaved->kobject = some_kobject; // some_kobject is a initialized pointer to kobj

文件2.c

#include <file1.h>

struct kobject *ko = ksaved->kobject;

在这里,我将kobject的值设置为null。 即使在file1.c发生初始化后才对file2.c进行调用

您能帮我访问kobject而不丢失数据吗? 可能指出我要去哪里了?

非常感谢,

更新:这是我的some_object的确切代码。 我正在获取“ ko”的正确地址。

void save_my_kobject(struct kobject *ko)
{
        ko_saved = kmalloc(sizeof(struct kobject_saved), GFP_KERNEL);

        *ko_saved = (struct kobject_saved) {
        .kobj = ko
        };

}

缺少某些源代码来清楚地了解您想做什么,例如:

struct *ko = ksaved->kobject;

不可能是正确的。 我想你的意思是:

struct kobject* ko = ksaved->kobject;

您基本上是在设置全局变量,该变量将被两个源文件修改。 不建议这样做(难以维护)。

无论如何,如果要这样做,则必须在一个文件中定义全局变量,然后像从中一样从第二个文件中引用它。 最好将extern语句保留在file2.c

我们没有您的确切顺序,所以我们不知道您的代码如何运行。 显然它不会崩溃,所以我猜想file1.c的malloc已经正常工作了。 这意味着file1.c已按预期运行。 这也意味着问题可能是这样的:

ksaved->kobject = some_kobject; // some_kobject is a initialized pointer to kobj

可能是错误的:也许some_kobject == NULL ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM