指针的编译问题

时间:2013-02-18 04:50:39

标签: c pointers

我刚刚介绍了C中的指针,并且一直在玩它们以尝试更熟悉它们。

有人可以解释为什么下面的代码无法编译吗?

int *high = (int *)malloc(sizeof(int)),*low = (int *)malloc(sizeof(int));
*high = 100;
*low = 0;

2 个答案:

答案 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*的函数需要。甚至不建议这样做,因为这样做可能会隐藏错误,例如,如果缺少有关函数的原型,如果使用强制转换,则编译器在没有强制转换的情况下给出的错误/警告会被抑制。