我在.h文件中定义了以下全局结构:
file1.h
struct kobject_saved {
struct kobject* kobject;
}
extern struct kobject_saved *ksaved;
file1.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
file2.c中
#include <file1.h>
struct kobject *ko = ksaved->kobject;
在这里,我得到kobject的值为null。即使在初始化发生在file1.c之后调用file2.c
您能否帮助我访问kobject而不会丢失数据?可能会指出我哪里出错了?
非常感谢,
更新:这是some_object的确切代码。我得到正确的地址&#34; ko&#34;虽然..
void save_my_kobject(struct kobject *ko)
{
ko_saved = kmalloc(sizeof(struct kobject_saved), GFP_KERNEL);
*ko_saved = (struct kobject_saved) {
.kobj = ko
};
}
答案 0 :(得分:2)
缺少源代码的某些元素以清楚地了解您要执行的操作,例如:
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
;