内存泄漏 - 如果没有指针指向未释放的内存。
悬空指针 - 指向已释放内存的指针。
您的代码有一个/两个的重大风险,尽管没有完整的代码示例,无法判断是否会发生任何一个。我只会给出一些可能的情况,说明它何时会发生。
作为最初的说明,如果您没有result
在调用函数中释放内存,则会发生内存泄漏。任何malloc
必须有一个对应的free
.
如果你input
像这样自由:
free(input);
不会有悬空指针。
input
但是,如果 的每个元素都没有result
指向同一内存的元素,则可能存在内存泄漏。如果多个元素result
指向这个内存,当你试图释放它时,你可能会得到一个悬空指针,以及一些未定义的行为。
如果你input
像这样自由:
int i;
for (i = 0; i < inputSize; i++)
free(input[i]);
free(input);
会有一个悬空指针。
为什么?
input[itr];
是一个指针。
result[count] = input[itr];
只是result[count]
指向与指向相同的内存input[itr]
。
因此,如果我们 free input[itr]
,result[count]
将指向已释放的内存,因此是悬空的。
如果我们不释放input[itr]
,result[count]
仍然会指向有效内存。
如果你想result[count]
指向它自己的内存,你必须使用:
result[count] = malloc(inputItrSize);
memcpy(result[count], input[itr], inputItrSize);
注意 - 没有办法知道有多少内存input[itr]
指向,所以你必须自己声明inputItrSize
适当的大小。