一个我在网上找不到的问题。我有一段c代码运行在linux的喘息发行版上(raspberry pi,但这与此无关):

void function(const char * command)
{

    // Define commands for in between parameters
    char commandPre[] = "echo ";

    // Get the lengths of the strings
    int len= strlen(command) + strlen(commandPre);


    // Allocate the command
    char * fullCommand = (char *) malloc(len * sizeof(char));

    // Build the command
    strcat(fullCommand, commandPre);
    strcat(fullCommand, command);


    // Execute command
    system(fullCommand);

    // Free resources
    free(fullCommand);
}

现在,我从一个守护程序运行这段代码。但是当它第二次到达FULL(Full命令)(当函数在程序中被调用第二次)时,程序崩溃并存在。当我删除free(fullcommand)时,它会按预期工作。
我的问题是:system()是否已经为我释放了“fullcommand”?如果是,为什么第二次工作而不是第一次?我是不是丢了什么东西?
实际上,p.s.命令是由多个字符串strcat't组合而成的,但上面是最基本形式的代码

最佳答案

您有一个缓冲区溢出,因为您没有为字符串结束符分配空间。
另外,don't cast the return value of malloc(),并在假设分配工作之前检查返回值。
另外,正如您在自己的答案中指出的那样,在新分配的缓冲区上使用strcat()会中断,因为缓冲区不会是空字符串。很抱歉没有早点接。

09-06 14:32