gpt4 book ai didi

c - 如何释放划分为矩阵的动态分配的字符串?

转载 作者:行者123 更新时间:2023-11-30 19:36:11 25 4
gpt4 key购买 nike

我有一个malloced char *str。

char *str = strdup("first\nsecond\nthird\nfourth");

我有一个矩阵 char **内容。

char **content;

我的目标是剪切 str,用 '\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);
}

Then, content[0] contains "first", contant[1] contains "second" and [contant[2] contains "third" and contant[3] contains "fourth".

现在我的问题如下:当我尝试从第一个地址释放时出现错误。我不知道我所做的是否会破坏内存或我不知道。请帮忙,如果可能的话如何释放它。

最佳答案

当您 alloc() 内存时,系统会跟踪您分配的 block 的大小 - 释放时,系统会释放与分配的 block 相同的大小。因此,如果您只使用一个 malloc(),则只能 free() 一次 - 任何指向现在已释放区域的指针都会失效。

因此,“str”需要一个 free(),“content”需要一个 free()。释放str后,“content”中的所有指针都无效,但您必须释放“content”本身。或者,先释放“内容”,然后释放“str”。

关于c - 如何释放划分为矩阵的动态分配的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41595260/

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