Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在gcc中将NULL分配给类型为double的延迟指针会生成错误_C_Pointers_Gcc - Fatal编程技术网

在gcc中将NULL分配给类型为double的延迟指针会生成错误

在gcc中将NULL分配给类型为double的延迟指针会生成错误,c,pointers,gcc,C,Pointers,Gcc,我们正在编译一组Pro C文件,预处理并创建一组相应的目标文件 编译其中一个pro C文件时,我们遇到以下问题: 声明double类型的指针变量,例如i_ib,如下所示: double *i_ib; 然后,它被取消引用,值NULL被分配给取消引用的指针,如下所示: *i_ib=NULL; 上述语句在最新的gcc编译器(版本:4.1.2)中生成错误。在以前的编译器中,此语句未产生错误。请帮助我们为double获得等效的NULL。非常感谢你的帮助。 提前多谢:-) -Murali要将指针设置为N

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

编译其中一个pro C文件时,我们遇到以下问题:

声明double类型的指针变量,例如
i_ib
,如下所示:

double *i_ib;
然后,它被取消引用,值NULL被分配给取消引用的指针,如下所示:

*i_ib=NULL;
上述语句在最新的
gcc
编译器(版本:4.1.2)中生成错误。在以前的编译器中,此语句未产生错误。请帮助我们为double获得等效的
NULL
。非常感谢你的帮助。 提前多谢:-)
-Murali

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

i_ib = NULL;
现在,您正在尝试将
NULL
分配给
双精度
,而不是指针。

@NPE关于为指针分配新引用的正确方法。但是我想补充一点,如果您需要在以前的编译器版本下保留代码的行为(尽管这可能是一个bug),那么您需要这样做:

*i_ib = 0.0;

它将
0.0
的值分配给
i_ib
所引用的内存位置,这(可能)就是您以前的编译器所做的。

嗯,double就是double,指针就是指针。如果不希望该指针再指向某个特定的双精度,请为其指定另一个双精度的地址或为指针指定NULL,而不是它所指向的值:

i_ib = &another_dbl;
i_ib = NULL;
要将double的值更改为“NULL”,您必须理解double不能真正为NULL。double是一个特定的内存块,除非你设法让它神奇地消失,否则你不能“清空”它。
您唯一能做的就是通过执行以下操作将该内存块中的位设置为零:

*i_ib = 0.0;
在这种情况下,任何双
i_ib
引用都将表现为好像已“初始化”为零

就这样

@Damon,谢谢,我已经说得更清楚了,这不是一个好主意。但是FTR它不一定是一个bug。这取决于
i_ib
在解除引用之前是否正确分配。OP并不说明他的两行代码是连续的,所以在代码被删除和分配时,代码< > IyIB 确实可能指向<代码>双< /代码>。我认为原始代码中的奇怪东西来自于他们使用C和C++两种工作的预编译器。可能习惯于将此编译成C++的代码< > null < /C> >只是<代码> 0代码/代码>,而不是<代码>(空洞*)0 < /C>。零将精细转换为
double
double*
,因此没有可见错误。但不知何故,他们得到了一个错误的回合,并分配了一个值,而不是设置指针,在C中,转换失败。您100%正确地认为原始源的行为是完全不同的。我只是想指出,这是UB,可能也是无意的。:)或者换一种说法,他们可能必须检查原始的Pro-C代码,因为那里有更严重的错误。