C 如何将动态分配的字符串释放到矩阵中?
我有一个malloced char*strC 如何将动态分配的字符串释放到矩阵中?,c,C,我有一个malloced char*str char *str = strdup("first\nsecond\nthird\nfourth"); 我有一个矩阵字符**内容 char **content; 我的目标是用“\0”替换“\n”,并将每个第一个地址按顺序放在矩阵中每个“\0”之后。以下代码起作用: int count_lines(char *str, char **content) { int len; if (content) content[0
char *str = strdup("first\nsecond\nthird\nfourth");
我有一个矩阵字符**内容
char **content;
我的目标是用“\0”替换“\n”,并将每个第一个地址按顺序放在矩阵中每个“\0”之后。以下代码起作用:
int count_lines(char *str, char **content)
{
int len;
if (content)
content[0] = str;
len = 0;
while (str && *(str++))
{
if (*str && *(str - 1) == '\n')
{
len++;
if (content)
{
*(str - 1) = 0;
content[len] = str;
}
}
}
if (content)
content[len + 1] = 0;
return (len + 1);
}
void test()
{
char **content;
int lines;
lines = count_lines(str, NULL);
content = malloc(sizeof(char *) * (lines + 1));
count_lines(str, content);
}
然后,内容[0]包含“第一”,内容[1]包含“第二”,并且
[contant[2]包含“第三个”,contant[3]包含“第四个”
现在我的问题是:我在尝试从第一个地址释放时出错。我不知道我所做的操作是否会破坏内存或idk。请帮助,如果可能,如何释放此内存。当您分配()内存时,系统会跟踪您分配的块的大小-释放时,系统会释放与分配的相同数量的内存。
因此,如果只使用一个malloc(),则只能释放()一次-指向现在已释放区域的任何指针都将无效
因此,您需要一个free()表示“str”,一个free()表示“content”。释放str后,“content”中的所有指针都将无效,但您必须释放“content”本身。或者,首先释放“content”和“str”稍后。您必须对每个单词进行malloc。1 free==1 malloc。请将代码粘贴到您尝试释放的位置。您究竟是如何尝试释放内存的?释放内容的部分在哪里?嗯,我认为您应该只使用
free(content)
即可。这是因为您将其分配为单个内存块(您只调用了malloc
一次)您只有一个分配的内存块。在某些位置放置“\0”不会改变任何事情。只释放第一个块content[0]
和content
本身。我不需要这个,我想自己做,或者分配一次,然后释放一次-这很简单不,您不明白我的方式