【问题标题】:C program(malloc) is not compiling in ubuntu 11.04C 程序(malloc)未在 ubuntu 11.04 中编译
【发布时间】:2012-01-15 18:26:10
【问题描述】:

我已经通过这个sudo apt-get install build-essential 命令安装了 gcc 编译器

我的程序代码是

 #include<stdio.h>

 main()
   {
      int *b;

      b = (int*)malloc(10*sizeof(int));  

      printf("b=%u\n\n",b);
      printf("b+1=%u\n\n",(b+1));
      printf("b+2=%u\n\n",(b+2));

      b[2]=4;
      printf("*(b+2)=%d\n\n",*(b+2));

  }

当我尝试从cc -c program.c 命令编译这个程序时 然后我得到一些错误

【问题讨论】:

  • 你不应该转换malloc的返回值。这只是隐藏错误的好方法。
  • 你的大学视频教程是为旧版本的 gcc 制作的,应该更新 :) 嗯,等一下?编程视频教程?阅读和理解文本发生了什么?无论如何,你都需要它来很好地编程......
  • 打印出指针的值也很奇怪。这是一个完全没有意义的值。考虑到您可能永远不会再这样做了,不确定这个演示向您展示了什么。编译器只是警告你指针是 not unsigned ints.
  • @CodyGray 转换malloc的返回值是一种兼容C++的方式。但这里肯定没有必要。
  • 为什么h***你是以root用户登录来编译你的代码?

标签: c linux ubuntu-11.04


【解决方案1】:

您缺少#include &lt;stdlib.h&gt;(对于malloc),并且格式字符串错误。使用%p 打印指针。

另外,您不需要 (and probably shouldn't) 强制转换 malloc 的返回值(在 C 中)。

不带参数的main 的正确签名是:

int main(void)

更正的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *b;

    b = (int*)malloc(10*sizeof(int));

    printf("b=%p\n\n",  (void*) b);
    printf("b+1=%p\n\n",(void*) (b+1));
    printf("b+2=%p\n\n",(void*) (b+2));

    b[2]=4;
    printf("*(b+2)=%d\n\n",*(b+2));

    return 0;
}

【讨论】:

  • 我不太相信,对不起。我对您的代码进行了上述更改,它编译时没有任何警告。
  • 您还应该将要打印的指针转换为void*(在特殊情况下void*int* 表示不同)。
  • @pmg:我想知道有多少代码在这样的实现中被严重破坏了......
  • @mayank:我发布了完整的更正代码。它不会对 GCC 4.5、4、4.7 发出任何警告,也不会对 clang 或 icc 发出任何警告。
【解决方案2】:

我不知道为什么它在视频中起作用,它可能使用了一些奇怪的非标准编译器。

但是您的错误是因为您使用的是 int 而不是 unsigned int 并且当它需要 unsigned int 时您将指针传递给 printf。

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多