【发布时间】:2020-10-24 21:54:49
【问题描述】:
假设我有一个结构
struct
foo{
char *p1;
char *p2;
char *p3;
}foo;
我已经分配了 struct malloc - 分配的字符串行
#include <stdlib.h>
#include <string.h>
char temp[] = "this is string"
char *allocated_temp = malloc(sizeof(temp));
strcpy(allocated_temp, temp);
struct foo bar;
bar.p1 = strtok(allocated_temp, " ");
bar.p2 = strtok(NULL, " ");
bar.p3 = strtok(NULL, " ");
我想释放p1,而不释放p2 和p3 指向的其他内存。 using realloc 将不起作用,因为 p3 将首先被释放,我正在寻找一种更优雅的解决方案,而不是使用在没有第一部分的情况下将结构复制到新结构或将其他两个字符串重新分配到不同的地址。
这个问题有什么好的解决方案?
(澄清一下,当我说我想释放 p1 时,我的意思是字符串的 "this\0" 部分。
【问题讨论】:
-
这看起来像一个 XY 问题。为什么要释放数组的一部分?
-
@klutt 是的,我想释放内存块的第一部分(第一个空终止符之前的部分)。什么是 XY 问题?
-
那么当你想忽略它的时候,为什么不直接使用
p2呢? -
您对
strtok()的使用不正确。bar.p1 = strtok(allocated_temp, " ");适合第一行,但后面的行bar.p2 = strtok(allocated_temp, NULL);是错误的。它们应该是bar.p2 = strtok(NULL, " ");被解析的字符串被替换为NULL,而不是分隔符字符串。
标签: c string malloc dynamic-memory-allocation free