在尝试解决问题时,我不小心将以下内容放入了我的代码中。
/* simplified for context*/
char *command = NULL;
char *new_command = (char *) malloc(10);
...
free(command);
command = (char *) malloc (new_command + 1);
strcpy(command, new_command);
它不仅遵守了运行没有问题,甚至消除了原来的问题。我已经将代码修复为:
command = (char *) malloc (strlen(new_command) + 1);
这也有效,但我真的很想在修复它之前了解它为什么有效以及它到底在做什么。
编辑:实际上在代码中省略了 ... 命令已分配并存储了数据。command 和 new_command 在调用 free 之前都分配了内存并存储了数据。在其他函数中分配的,一个最初来自读入的文件,另一个是通过 TCP 套接字连接接收的。该程序将来自客户端的命令与当前确切的可执行文件(包括文件中的路径)进行匹配,然后调用该命令。一开始就忽略了所有这些,因为我认为它与发生的事情没有任何关系,以及为什么它在对 malloc 的错误调用(传递指针而不是大小)时完全起作用。