[英]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.