【发布时间】:2016-03-03 06:20:33
【问题描述】:
当我们做setenv() 或putenv() 时,《UNIX 环境中的高级编程》一书中说,当我们修改环境列表的值时,这很复杂。
基本上,环境列表存储在栈顶。
但是,书上说,在name=value结构中,如果我们将一个名字的旧值更改为一个大于旧值的新值,我们必须malloc()为新字符串获得空间,复制将新字符串指向该区域,然后将环境列表中对应名称的旧指针替换为指向该分配区域的指针(必须是堆区域,因为我们使用malloc())。
但是,基本上环境列表存储在堆栈的顶部。因此,新值必须位于此处,而不是堆区域(malloc() 的区域)。那么,为什么这个值在堆区而不是栈顶呢?
有char** environ 全局变量,这个双指针指向指向name=value 字符串的指针数组。我认为这个name=value 字符串是environ 的指针数组所指向的数据之一。这就是为什么我无法理解指针指向堆区域的数组(在上述情况下存储新值)。
【问题讨论】: