在内核动态申请内存后,使用 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));
1
gzfrankie 2020-06-25 17:40:46 +08:00 via iPhone
看不懂你想干什么,但是你这个用法一定是错的。
正确写法: ClinkList L=(CLinkNode*)kmalloc(sizeof(CLinkNode),GFP_KERNEL); memset(L, 0, sizeof(CLinkNode)) |
2
jmc891205 2020-06-25 17:55:29 +08:00 via iPhone
可以的 但是你这样初始化和不初始化好像也没太大不同
|
3
xiaojiao OP @jmc891205 #2 感觉是没什么不同啊 但是我不知道 不使用 memset 的话会有什么问题。还有就是我不知道 用 memset 去初始化带指针的结构体会不会出现什么问题啊,我看到 CSDN 上有一篇说会出现什么问题,具体的它也没说明白,也没有说正确姿势是什么。
|
5
cheng6563 2020-06-25 21:56:52 +08:00 via Android
我记得不初始化的话 struct 里可能会是其他地方用过的垃圾数据。如果你马上就会把 struct 里的全部变量写一次不初始化也行的吧
|
6
shakespark 2020-06-26 06:18:01 +08:00 via iPhone
非静态变量不会自动初始化,所以应该用 memset 全初始化为 0 。指针都初始化为 null 了,会有什么问题?
|