【发布时间】:2019-11-25 09:55:43
【问题描述】:
我想在使用后清理这个char* 的静态数组。我想从文件中读取并将通过 fgets() 获得的行拆分为单词数组,返回它并清理缓冲区(static char *words)。但这是我对 split() 的实现,我想知道静态 char* 字是否不会导致内存泄漏,因为我无法销毁它,因为我想在每次从文件中获取一行时调用它:
#define MAX_LENGTH 10000
char** split(char* string)
{
static char* words[MAX_LENGTH / 2];
static int index = 0;
const char* delimiter = " ";
char* ptr = strtok(string, delimiter);
while (ptr != NULL)
{
words[index] = ptr;
ptr = strtok(NULL, delimiter);
++index;
}
index = 0;
return words;
}
int main()
{
char line[] = "yes you are good ";
char **splitted = split(line);
printf("%s\n", splitted[2]);
}
请问有什么办法吗?
【问题讨论】:
-
函数中静态存储野兽的本质。您可以执行类似基于已知输入值触发替代行为的操作(即,调用方将
NULL发送为string重置index并擦除数组)。但这是一个掩盖真正问题的骇人听闻的黑客行为。这是一个糟糕的地方,首先使用静态数组。 -
你为什么要把
index设为静态? -
谢谢我没有注意到索引不应该是静态的。感谢更新
-
@WhozCraig ,我对你的解释有点模糊。你能举个例子吗?
标签: c