Код: Выделить всё
const char* value = std::getenv("key");
setenv("key", "another_value");
read(value); // is this valid?
< /code>
Страница человека для setenv () ничего не говорит об этом случае. Тем не менее, я не могу понять, что кажется, это очень простой кусок кода в setenv () Код: Выделить всё
size = 0;
if (ep != NULL)
{
for (; *ep != NULL; ++ep)
if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
break;
else
++size;
}
if (ep == NULL || __builtin_expect (*ep == NULL, 1))
{
char **new_environ;
/* We allocated this space; we can extend it. */
new_environ = (char **) realloc (last_environ,
(size + 2) * sizeof (char *));
Учитывая вышеперечисленное, если мы нашли хорошее значение в цикле выше, разве вызов realloc не является плохим? Это может в конечном итоге сократить 2D массив, перезаписывая другое имя = value пары?
Подробнее здесь: https://stackoverflow.com/questions/796 ... n-in-glibc