最近我看到了以下片段代码:
if ((rgb = (fp16 *)malloc(width*height*sizeof (*rgb)*3)) == NULL)
rgb被声明为某种类类型的指针。 在上面的代码中,malloc()接受的参数是width * height * sizeof(* rgb)
所以它是某种自引用初始化(如果我可以通过给出这个名字来调用它!) 即belore rgb指针由malloc分配,它在调用malloc时解除引用它。
在这个特定的代码中,我看到指针rgb没有初始化为NULL或任何东西。
此类代码的行为是什么。
正常运作或
由于空指针取消引用或
车库指针取消引用
感谢,
-AD。
答案 0 :(得分:7)
sizeof
不评估其操作数,因此在这种情况下,sizeof(*rgb)
将返回rgb
类型的大小,我假设它是fp16 *
。
完全有效的C代码。
如果确实评估了它并且指针只是一些没有初始值的声明指针,那么你将得到未定义的行为。
答案 1 :(得分:2)
实际上并没有解除引用指针,sizeof(*rgb)
执行rgb
指向的类型大小的编译时确定。该行生成的机器代码将使用文字数代替sizeof(*rgb)
项。
答案 2 :(得分:1)
sizeof
不评估其论点。它只计算它的大小。因此,您不会将未定义的行为与未初始化的指针解除分配相关联。
答案 3 :(得分:0)
在正常情况下,当malloc成功时,if块不会发生。如果malloc失败,则将执行该块。
答案 4 :(得分:0)
引用:
我看到指针rgb不是 初始化为NULL或任何东西。
如果rgb初始化为NULL,那么它将经历if
条件。
这就是代码行很好。