malloc,自由和重新定义变量

时间:2012-12-15 12:18:57

标签: c malloc free redefinition

我正在尝试使用变量并在函数使用它之后将其擦除。 Basicacly我是strint str1 + str2,在函数中使用它然后释放内存。 我以为我得到了一切困难,但我的代码给我发出了警告和错误:

  1. 错误:重新定义'commande'。
  2. 警告:隐式声明函数'malloc'[-Wimplicit-function-declaration]
  3. 警告:内置函数'malloc'的不兼容隐式声明[默认启用]
  4. 警告:隐式声明函数'free'[-Wimplicit-function-declaration]
  5. 警告:内置函数'free'的不兼容隐式声明[默认启用]
  6. 以上是上述代码:

    // Step 1
    char* commande = (char*) malloc(len1 + len2 + 1);
    strcpy(commande, str1);
    strcat(commande, str2);
    function(commande);
    free(commande);
    // Step 2
    char* commande = (char*) malloc(len3 + len4 + 1);
    strcpy(commande, str3);
    strcat(commande, str4);
    function(commande);
    free(commande);
    

    我做错了什么?

    编辑:我更正了len2中的拼写错误。

2 个答案:

答案 0 :(得分:1)

诸如

之类的陈述
char* commande = (char*) malloc(len3 + len4 + 1);

是变量声明。它说编译器:我希望commande成为一个字符的指针。您只能在函数中声明变量一次,因为重新声明变量没有任何意义。

关于不兼容的隐式定义的错误来自于您没有告诉编译器malloc具有什么类型的事实。为此,您必须包含一个包含所有必要声明的头文件。将以下行放在文件顶部:

#include <stdlib.h>

答案 1 :(得分:0)

确保你已经包含在内,并且不需要在第2行之后声明指针命令。