【发布时间】:2018-04-03 15:20:40
【问题描述】:
在我不小心使用的代码中
list* Head = malloc(sizeof(list*));
而不是正确的
list* Head = malloc(sizeof(list));
创建一个新的list 类型节点,但后来它工作得很好。
所以我的问题是为什么它可以正常工作?
【问题讨论】:
-
你的意思是工作?编译成功还是你的程序运行良好?
-
编译成功,当我调试它时,它存储了 int 值并将其显示在内存中
-
sizeof(list*)大于或等于sizeof(list)或者您有未定义的行为。 -
所以,
sizeof(list *)不大于或等于sizeof(list),因此您有未定义的行为。如果您使用gcc,请尝试使用-fsanitize=undefined进行编译。 -
@muhammadshoaib 请注意,未定义的行为包括“显然工作正常”。去谷歌上查询。你的错误程序可能运行 100 次,但第 101 次失败。或者,如果您在另一台计算机上编译和运行,它可能每次都失败,或者可能发生其他任何事情。
标签: c pointers malloc structure sizeof