【发布时间】:2019-08-28 17:22:55
【问题描述】:
我有一个关于如何在 C 中创建临时字符串的问题。我的意思是我想在每个迭代步骤中创建一个字符串,并在变量不再有用后释放它。 我见过与这个类似的问题,但它们有很大的不同。
所以现在我有类似的东西:
for (int i = 0; i < array_size; i++) {
//aray1 and array2 are arrays of strings
char* temporary_value = make_hash(array1[i], array2[i], size[i]);
if (is_valid(temporary_value)) {
//Code, that doesn't interferate in memory, but uses temporary_value - mostly just compare to it
}
free(temporary_value);
}
make_hash 根据 size[i] 分配内存。
但感觉很不对劲,有时会返回段错误。 我改进的想法是:
- 制作字符串数组并在循环后释放它
- 将“make_hash”代码放入for循环中,并在迭代期间重新分配内存,并在for循环之后释放temporary_value
但这些解决方案似乎也很糟糕。您将如何处理此类问题?
【问题讨论】:
-
您能知道在执行此循环时作为参数传递给
make_hash的最大可能大小吗? -
感谢大家的宝贵时间,尤其是@dedecos,因为数组不是那么大,我决定再迭代一次并获得最大可能的大小,在循环之前为变量分配内存并释放它之后:)
-
希望我能帮上忙(:你想让我创建一个答案还是你已经知道了?
-
已经知道了,谢谢:)
-
如果性能很重要,
malloc/free每次循环可能会很浪费。
标签: c string memory-leaks