我想在SetUpTCPtoSendInformation里面分配内存
时间: 2024-04-14 12:30:35 浏览: 54
如果你想在 `SetUpTCPtoSendInformation` 函数内部分配内存,以便在函数外部使用,你可以通过传递一个指向指针的指针来实现。
以下是修改后的代码示例:
```c
int SetUpTCPtoSendInformation(char option[], char **command) {
static int isFirstCall = 1;
pthread_mutex_lock(&mutex); // 加锁
if (isFirstCall && strstr(option, "set")) {
if (TCPCommand != NULL) {
free(TCPCommand);
}
TCPCommand = malloc(strlen(*command) + 1);
if (TCPCommand == NULL) {
printf("Failed to set and obtain TCP command variable memory allocation\n");
goto fail;
}
strcpy(TCPCommand, *command);
printf("set:%s\n", TCPCommand);
isFirstCall = 0;
goto succeed;
} else if (!isFirstCall && strstr(option, "get") && TCPCommand != NULL && strlen(TCPCommand)) {
if (*command != NULL) {
free(*command);
}
*command = malloc(strlen(TCPCommand) + 1);
if (*command == NULL) {
printf("Failed to allocate memory for command\n");
goto fail;
}
strcpy(*command, TCPCommand);
printf("get:%s\n", *command);
free(TCPCommand);
TCPCommand = NULL;
isFirstCall = 1;
goto succeed;
}
// 其他情况处理
printf("Invalid option\n");
goto fail;
fail:
pthread_mutex_unlock(&mutex); // 解锁
return 0;
succeed:
pthread_mutex_unlock(&mutex); // 解锁
return 1;
}
```
在这个修改后的代码中,我们通过传递 `char **command` 参数来接收要分配的命令字符串。在 "set" 选项中,我们按照之前的逻辑进行内存分配和赋值。在 "get" 选项中,我们首先释放传入的 `*command` 指向的内存(如果存在),然后再进行新的内存分配和赋值。
这样,当你调用 `SetUpTCPtoSendInformation` 函数时,传递的 `&SendString` 参数将会在函数内部进行内存分配,并将分配的内存地址赋值给 `SendString`。
然后,你可以在函数外部使用 `SendString`,并且在不再需要时记得释放内存。
希望这次修改能够解决你的问题。如果还有其他疑问,请随时提出。
阅读全文