初始化带指针的 struct

2020-06-25 17:18:01 +08:00
 xiaojiao

在内核动态申请内存后,使用 memset 去初始化这块内存,但是这个 struct 里面是有指针的,这样能成功吗?

typedef struct CLinkNode { LElemType data; struct CLinkNode *ptr; struct CLinkNode *next; }CLinkNode,*ClinkList;

ClinkList L=(CLinkNode *)kmalloc(1,GFP_KERNEL); //动态内存分配后需要重置分配的内存的初始值 memset(L,'a',sizeof(CLinkNode));

1269 次点击
所在节点    问与答
6 条回复
gzfrankie
2020-06-25 17:40:46 +08:00
看不懂你想干什么,但是你这个用法一定是错的。

正确写法:
ClinkList L=(CLinkNode*)kmalloc(sizeof(CLinkNode),GFP_KERNEL);
memset(L, 0, sizeof(CLinkNode))
jmc891205
2020-06-25 17:55:29 +08:00
可以的 但是你这样初始化和不初始化好像也没太大不同
xiaojiao
2020-06-25 18:00:37 +08:00
@jmc891205 #2 感觉是没什么不同啊 但是我不知道 不使用 memset 的话会有什么问题。还有就是我不知道 用 memset 去初始化带指针的结构体会不会出现什么问题啊,我看到 CSDN 上有一篇说会出现什么问题,具体的它也没说明白,也没有说正确姿势是什么。
jmc891205
2020-06-25 18:33:02 +08:00
@xiaojiao 你还是先说明一下你预期的对这个结构体初始化之后的结果是什么样
cheng6563
2020-06-25 21:56:52 +08:00
我记得不初始化的话 struct 里可能会是其他地方用过的垃圾数据。如果你马上就会把 struct 里的全部变量写一次不初始化也行的吧
shakespark
2020-06-26 06:18:01 +08:00
非静态变量不会自动初始化,所以应该用 memset 全初始化为 0 。指针都初始化为 null 了,会有什么问题?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX