【发布时间】:2015-12-22 16:18:32
【问题描述】:
我不明白为什么,在下面的代码 sn-p 中,程序员使用了一个静态变量(因此我开始怀疑我所有的小知识):
int func (...) {
static unsigned int *temp = NULL;
if( temp == NULL ) {
temp = malloc(dim*sizeof(*temp));
}
// do stuff with temp
}
在main()中,func在一个循环中被多次调用:
int main() {
for (i = 0; i < N; ++i)
x = func(...);
}
第一次调用 func 将变量 temp 初始化为 NULL,因此 temp 被分配(也许初始化也是多余的(根据 post)。
func 函数对 temp 没有任何特殊作用,如果满足条件,只需将一些值从另一个(全局)数组复制到它并返回写入的元素数。
如果我理解正确,malloc 会在堆中分配内存,因此内存将是持久的,直到它被显式释放,并且由于指针是静态的,它可以在后续调用中访问。
然后是问题:
- 我理解正确吗?
- 这种方法而不是 malloc temp 的优点是什么 在 func 之外,然后将其显式传递给 func?我猜 视情况而定,好的,但也许有一个众所周知的 例子。我也看到了这个answer,但我无法理解 第一个例子的用处。
- 我必须在 func 中释放 temp(在最后一步,顺便说一下,这段代码中没有这样做)?
我需要修改上面的代码(这要复杂得多),我更喜欢在 func 之外分配 temp 然后将它传递给函数,我想确保我没有遗漏一些重要的东西。顺便说一句,我认为我可以学到一些东西:)。
谢谢。
【问题讨论】: