我有一个结构变量,其传递如下:
//function definition
void function1(const Node* aVAR1)
{
Node* value=NULL;
.....
}
int main()
{
Node* aVAR=NULL;
aVAR=x.value;
function1(aVAR);
}
在这里,当我在 gdb 中运行它并进入function1()
时,我看到为变量aVAR
创建了一个临时内存地址。
广发银行:
21 aVAR=x.value;
(gdb) p aVAR
$5 = (Node *) 0x654321
(gdb) n
Breakpoint 1, function1(aVAR1=0x7ffffffffebcdf ) at debug/../abc.c:12
12 {
(gdb) p aVAR1
$6 = (const Node *) 0x7ffffffffebcdf
例如,
- 最初,aVAR 的地址是
0x654321
- 稍后一段时间,直到第一条指令
function1()
没有被执行,aVAR1
它被保存在某个临时地址中,如0x7ffffffffebcdf
. - 执行
Node* value=NULL;
完 which 是 中的第一条指令后function1()
,aVar1
的地址0x654321
又是。 - 但是这个临时 (
0x7ffffffffebcdf
) 地址没有被清除:即使在函数退出后,0x7ffffffffebcdf
也没有被清除
我想0x7ffffffffebcdf
在函数退出后被清除,但该0x7ffffffffebcdf
地址没有可以访问该内存的指针。在 GCC 中链接时是否有任何选项可以防止这种情况发生?
如果我为 aVAR 添加一个 malloc 并稍后使用 memset 和 free 清除它,问题得到解决,但是当我看到时,我失去了对 malloc() 分配的内存块的引用,我将无法释放( ) 分配的内存(导致内存泄漏)。