gpt4 book ai didi

c - "Conditional jump or move depends on uninitialised values"释放字符时 **

转载 作者:行者123 更新时间:2023-12-02 09:06:08 27 4
gpt4 key购买 nike

我正在为学校用 C 语言编写一个简约的 shell。它工作正常,但使用 Valgrind 我收到此错误,我无法弄清楚我做错了什么。我在程序开始时得到它:

==9396== Conditional jump or move depends on uninitialised value(s)
==9396== at 0x1093AC: get_env (msh.c:59)
==9396== by 0x1094FA: main (msh.c:106)
==9396== Uninitialised value was created by a heap allocation
==9396== at 0x483577F: malloc (vg_replace_malloc.c:309)
==9396== by 0x109341: get_env (msh.c:55)
==9396== by 0x1094FA: main (msh.c:106)
==9396==

首先,我在 main() 中复制了环境变量 (extern char **environ):

 if (!(env = get_env(environ)))
return (1);

这是函数:

 char    **get_env(char **environ)
{
char **copy;
char **env_ptr;
char **cpy_ptr;

if (!(copy = malloc(sizeof(copy) * get_tab_size(environ) + 1)))
exit(EXIT_FAILURE);
env_ptr = environ;
cpy_ptr = copy;
while (*cpy_ptr)
{
if (!(*cpy_ptr = ft_strdup(*env_ptr)))
exit(EXIT_FAILURE);
cpy_ptr++;
env_ptr++;
}
cpy_ptr = NULL;
return (copy);
}

在程序结束时,我使用此函数释放副本并得到相同的错误:

==9396== Conditional jump or move depends on uninitialised value(s)
==9396== at 0x10BFC0: ft_free_tab2 (in /home/pom/dev/19/msh/msh)
==9396== by 0x109593: main (msh.c:126)
==9396== Uninitialised value was created by a heap allocation
==9396== at 0x483577F: malloc (vg_replace_malloc.c:309)
==9396== by 0x109341: get_env (msh.c:55)
==9396== by 0x1094FA: main (msh.c:106)

这是释放函数:

  void    ft_free_tab2(char **env)
{
char **ptr;

if (!env)
return ;
ptr = env;
while (*ptr)
{
free(*ptr);
ptr++;
}
free(env);
}

当程序的其他部分使用副本时,我也会遇到问题。任何帮助将不胜感激。

最佳答案

这里分配一些未初始化的内存用于复制。

copy = malloc(sizeof(copy) * get_tab_size(environ) + 1)

然后你创建一个指向它的指针。

cpy_ptr = copy;

到目前为止一切顺利,但是你这样做:

while (*cpy_ptr)

copy,因此cpy_ptr也指向未初始化的内存。您需要在取消引用指针之前对其进行初始化。

我还要指出的是,您使用的是 sizeof(copy) 而不是 sizeof(*copy)。当然,在这种情况下它给出了相同的结果,但这只是因为它是一个双指针。

关于c - "Conditional jump or move depends on uninitialised values"释放字符时 **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com