Как манипулировать низкоуровневым USB как необработанным электрическим сигналом?

Ваше наблюдение верно. Новая строка, которую вы выделили с помощью malloc, заменяет старую строку, и старая строка больше не используется. Если старая строка является частью среды, переданной при запуске программы (, т. е. это первый раз, когда переменная изменяется в этом процессе ), то старая строка является частью сегмента стека.

Является ли это утечкой памяти или нет, спорный вопрос. Вы не можете освободить память, занятую старой строкой, но и нет разумного способа повторно использовать эту память. Если вы вызовете putenvнесколько раз, вы, конечно, можете freeвыделить память, которую вы выделили себе, когда строки больше не используются.

Обратите внимание, что семантика putenvзависит от версии glibc, как описано на странице руководства .

Кстати, в вашей программе ошибка, а не

strcat(temp, "");
strcat(temp, "PWD=/home/mycomputer/");

вы должны написать

strcpy(temp, "PWD=/home/mycomputer/");

-1
16.10.2021, 07:53
0 ответов

Теги

Похожие вопросы