我有一个malloced char * str。
char *str = strdup("first\nsecond\nthird\nfourth");
我有一个矩阵char **内容。
char **content;
我的目标是将'\ n'替换为'\ 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);
}
然后,content [0]包含“first”,incnt [1]包含“second”和 [contant [2]包含“third”,而[3]包含“4th”。
现在我的问题是以下问题:当我尝试从第一个地址释放时出现错误。我不知道我做了什么打破了记忆或idk ..请帮助,如果可能的话如何释放它。
答案 0 :(得分:0)
当你分配()内存时,系统会跟踪你分配的块的大小 - 释放时,系统会释放分配的相同数量。 所以,如果你只使用一个malloc(),你只能释放一次() - 任何指向现在释放的区域的指针都会失效。
因此,你需要一个free()用于" str"和一个free()用于"内容"。释放str后,"内容"中的所有指针变得无效,但你必须免费获得内容"本身。或者,免费"内容"首先和" str"后面。
答案 1 :(得分:0)
你必须对每个单词进行malloc。 1个免费== 1个malloc。请将代码粘贴到您尝试免费的地方