我在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。有人知道会发生什么吗?
答案 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 *)获取内存的所有变量。