【发布时间】:2012-05-17 04:00:39
【问题描述】:
我们有一个带有 3 个静态变量的函数。这很奇怪,但我们有时会看到 3 个静态变量之一正在重新初始化:
static uchar * Foo( uchar c_par1, uchar c_par2, uchar c_par3 )
{
static char s_var1[10];
static uchar c_var2 = 0;
static uchar c_var3 = 0;
.....
return s_var1;
}
在上述情况下,c_var2 有时会重新初始化。
我们确信它已重新初始化,因为我们还打印了每个变量的内存位置,并且它永远不会改变。我们怀疑 s_var1 可能会覆盖 c_var2 但这两个变量的内存位置相距甚远。
【问题讨论】:
-
@AlexLockwood 这个问题很容易看出:“这怎么可能发生?”
-
answer>valgrind --leak-check=full说什么? -
@smocking Valgrind 不检测全局(或堆栈)溢出,因此极不可能说出任何有用的信息。而
--leak-check与该问题完全无关。所以恐怕你的罐头答案不是很有用。