我刚刚介绍了C中的指针,并且一直在玩它们以尝试更熟悉它们。
有人可以解释为什么下面的代码无法编译吗?
int *high = (int *)malloc(sizeof(int)),*low = (int *)malloc(sizeof(int));
*high = 100;
*low = 0;
答案 0 :(得分:1)
如果你有#included stdlib.h,它应该编译。
为确保您的代码正确无误,请将其替换为:
#include <stdlib.h>
int *high = malloc(sizeof(int));
int *low = malloc(sizeof(int));
if(high == NULL || low == NULL)
{
// no memory, error handling here
}
*high = 100;
*low = 0;
...
free(high);
free(low);
答案 1 :(得分:0)
如下所示包装代码可以使其按预期编译和工作:
#include <stdlib.h>
int main()
{
int *high = malloc(sizeof(int)),*low = malloc(sizeof(int));
*high = 100;
*low = 0;
return 0;
}
无论如何,代码缺少对系统调用的错误检查。始终检查系统调用的返回值。如果malloc()
,如果无法按请求分配内存,则将返回NULL
的值。在这种情况下行
*high = 100;
最有可能导致程序崩溃,因为解除引用*NULL
会引发未定义的行为。
在C中,强制返回值void*
的函数需要不。甚至不建议这样做,因为这样做可能会隐藏错误,例如,如果缺少有关函数的原型,如果使用强制转换,则编译器在没有强制转换的情况下给出的错误/警告会被抑制。