V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xiaojiao
V2EX  ›  问与答

初始化带指针的 struct

  •  
  •   xiaojiao · 2020-06-25 17:18:01 +08:00 · 1241 次点击
    这是一个创建于 1603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在内核动态申请内存后,使用 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));

    6 条回复    2020-06-26 06:18:01 +08:00
    gzfrankie
        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))
    jmc891205
        2
    jmc891205  
       2020-06-25 17:55:29 +08:00 via iPhone
    可以的 但是你这样初始化和不初始化好像也没太大不同
    xiaojiao
        3
    xiaojiao  
    OP
       2020-06-25 18:00:37 +08:00
    @jmc891205 #2 感觉是没什么不同啊 但是我不知道 不使用 memset 的话会有什么问题。还有就是我不知道 用 memset 去初始化带指针的结构体会不会出现什么问题啊,我看到 CSDN 上有一篇说会出现什么问题,具体的它也没说明白,也没有说正确姿势是什么。
    jmc891205
        4
    jmc891205  
       2020-06-25 18:33:02 +08:00 via iPhone
    @xiaojiao 你还是先说明一下你预期的对这个结构体初始化之后的结果是什么样
    cheng6563
        5
    cheng6563  
       2020-06-25 21:56:52 +08:00 via Android
    我记得不初始化的话 struct 里可能会是其他地方用过的垃圾数据。如果你马上就会把 struct 里的全部变量写一次不初始化也行的吧
    shakespark
        6
    shakespark  
       2020-06-26 06:18:01 +08:00 via iPhone
    非静态变量不会自动初始化,所以应该用 memset 全初始化为 0 。指针都初始化为 null 了,会有什么问题?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1051 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 583ms · UTC 22:19 · PVG 06:19 · LAX 14:19 · JFK 17:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.