malloc,free与变量的重新定义

malloc,free与变量的重新定义,c,malloc,free,redefinition,C,Malloc,Free,Redefinition,我正在尝试使用一个变量,并在函数使用它之后删除它。 基本上我是在做str1+str2,在函数中使用它,然后释放内存。 我以为我得到了所有东西,但我的代码向我抛出警告和错误: 错误:“命令”的重新定义 警告:函数“malloc”[-Wimplicit函数声明]的隐式声明 警告:内置函数“malloc”的不兼容隐式声明[默认启用] 警告:函数“free”的隐式声明[-Wimplicit函数声明] 警告:内置函数“free”的不兼容隐式声明[默认启用] 以下是上述代码: // Step 1 char*

我正在尝试使用一个变量,并在函数使用它之后删除它。 基本上我是在做str1+str2,在函数中使用它,然后释放内存。 我以为我得到了所有东西,但我的代码向我抛出警告和错误:

  • 错误:“命令”的重新定义
  • 警告:函数“malloc”[-Wimplicit函数声明]的隐式声明
  • 警告:内置函数“malloc”的不兼容隐式声明[默认启用]
  • 警告:函数“free”的隐式声明[-Wimplicit函数声明]
  • 警告:内置函数“free”的不兼容隐式声明[默认启用]
  • 以下是上述代码:

    // 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);
    
    我做错了什么

    编辑:我更正了第2节中的打字错误。

    char* commande = (char*) malloc(len3 + len4 + 1);
    
    是一个变量声明。它说编译器:我希望command是一个指向字符的指针。在一个函数中只能声明一次变量,因为重新声明变量没有任何意义

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

    #include <stdlib.h>
    
    #包括
    
    一种语句,如

    char* commande = (char*) malloc(len3 + len4 + 1);
    
    是一个变量声明。它说编译器:我希望command是一个指向字符的指针。在一个函数中只能声明一次变量,因为重新声明变量没有任何意义

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

    #include <stdlib.h>
    
    #包括
    
    确保在第2行之后包含并且不需要声明指针命令。

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

    您已经定义了
    命令两次,并且没有包含malloc/free(可能是stdlib.h)的头len1+len4是等待发生的堆损坏。请避免使用malloc强制转换(char*):char*commande=malloc(len1+len4+1);当我需要动态字符串时,我通常使用utstring,一组有用的字符串宏来处理字符串:您已经定义了两次
    commande
    ,并且没有包含malloc/free(可能是stdlib.h)的头。len1+len4是一个等待发生的堆损坏。避免使用malloc:char*commande=malloc强制转换(char*)(len1+len4+1);当我需要动态字符串时,我通常使用utstring,这是一组有用的字符串宏,用于处理字符串: