gpt4 book ai didi

c - free() 由 system() 使用的缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:41 26 4
gpt4 key购买 nike

一个我在互联网上找不到任何相关信息的问题。我在 Linux Wheezy 发行版(Raspberry Pi,但这不相关)上运行了一小段 C 代码:

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);
}

现在,我正在从守护程序运行这段代码。但是当它第二次到达 free(fullCommand) 时(当函数在我的程序中被第二次调用时),程序崩溃并存在。当我删除 free(fullCommand) 时,它按预期工作。

我的问题是:system() 是否已经为我释放了“fullCommand”?如果是这样,为什么它第二次起作用而不是第一次呢?我在这里遗漏了什么吗?

附言实际上命令是由几个字符串组合在一起组成的,但上面是最基本形式的代码

最佳答案

您有缓冲区溢出,因为您没有为字符串终止符分配空间。

此外,don't cast the return value of malloc() ,并在假设分配有效之前检查返回值。

此外,正如您在自己的回答中指出的那样,在新分配的缓冲区上使用 strcat() 会被破坏,因为缓冲区不会是空字符串。很抱歉没有早点拿起它。

关于c - free() 由 system() 使用的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com