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

时间:2011-12-20 00:16:25

标签: c

我在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。有人知道会发生什么吗?

2 个答案:

答案 0 :(得分:8)

H3_imag = NULL

应该是:

H3_imag == NULL

答案 1 :(得分:1)

malloc的返回值类型化为适当的类型是一种很好的做法。例如:如果H1_real的类型是double *,那么以下将是一个不错的。

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

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