ANSI C程序错误:指针地址初始化很好,然后在if语句后更改为0x0



我在Linux CentOS 64位计算机上有一个ANSI C程序,包含以下行:

H1_real = malloc(len_SPURFREQ_TIE * sizeof(double)); /* allocate memory */
H1_imag = malloc(len_SPURFREQ_TIE * sizeof(double)); /* allocate memory */
H2_real = malloc(len_SPURFREQ_TIE * sizeof(double)); /* allocate memory */
H2_imag = malloc(len_SPURFREQ_TIE * sizeof(double)); /* allocate memory */
H3_real = malloc(len_SPURFREQ_TIE * sizeof(double)); /* allocate memory */
H3_imag = malloc(len_SPURFREQ_TIE * sizeof(double)); /* allocate memory */
if ( (H1_real == NULL) || (H1_imag == NULL) || (H2_real == NULL) || (H2_imag == NULL) || (H3_real == NULL) || (H3_imag = NULL) ) {
exit(6);
}

当我使用gdb检查H1_real到H3_imag的分配地址时,它们看起来很好。if语句也执行得很好,因为没有触发exit(6)。但是在if语句执行之后检查H3_imag地址时,它现在读取0x0。有人知道会发生什么吗?

H3_imag = NULL

应该是:

H3_imag == NULL

malloc的返回值转换为适当的类型是一种很好的做法。例如:如果您的H1_real的类型是double *,那么下面将是一个很好的。

H1_real = (double *) malloc(len_SPURFREQ_TIE * sizeof(double)); /* allocate memory */

同样适用于使用malloc(返回void *)分配内存的所有变量。

最新更新