在gcc中为double类型的deferenced指针分配NULL会产生错误

时间:2013-11-29 13:55:04

标签: c pointers gcc

我们正在编译一组Pro C文件,预处理和创建一组相应的目标文件。

编译其中一个专业C文件时,遇到以下问题:

声明了一个double类型的指针变量,比如i_ib,如下所示:

double *i_ib;

然后,它被解除引用并将值NULL分配给解除引用的指针,如下所示:

*i_ib=NULL;

上面的语句在最新的gcc编译器(版本:4.1.2)中生成错误。在以前的编译器中,此语句未产生错误。请帮助我们将NULL等同于双倍。非常感谢您的帮助。 提前谢谢了 :-) - Murali

3 个答案:

答案 0 :(得分:5)

要将指针设置为NULL,请删除星号:

i_ib = NULL;

现在您尝试将NULL分配给double,而不是指针。

答案 1 :(得分:2)

@NPE is right关于为指针指定新指示物的正确方法。但是我想补充一点,如果你需要在以前的编译器版本下保留代码的行为(虽然它可能是一个bug),那么你会想要这样做:

*i_ib = 0.0;

0.0分配给i_ib引用的内存位置,这可能是您以前的编译器所做的事情。

答案 2 :(得分:2)

嗯,double是double,指针是指针。如果你不希望该指针再指向一个特定的double,那么要么为它指定另一个double的地址,要么将指定给指针,而不是它指向的值:

i_ib = &another_dbl;
i_ib = NULL;

要将double的值更改为“NULL”,您必须了解double不能真正为null。 double是一个特定的内存块,你不能“nullify”,除非你设法以某种方式让那个记忆神奇地消失。
您可以做的唯一事情是通过执行以下操作将该内存块中的位设置为零:

*i_ib = 0.0;

无论在这种情况下是什么双i_ib引用,都会表现为好像已经“初始化”为零 就是这样