gpt4 book ai didi

c: valgrind "Conditional jump or move depends on uninitialised value(s)"

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:53 25 4
gpt4 key购买 nike

我在 valgrind 中遇到错误,不知道哪里出了问题。错误是:valgrind 输出:

==1112== Conditional jump or move depends on uninitialised value(s)
==1112== at 0x402BF0D: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)

它指出问题出现在第 226 行:

if(reallocate ==TRUE)
{
char** temp_values = NULL;


temp_values = (char**) realloc(theBoard->_values, theBoard->_size_r*sizeof(char*) );

if(temp_values!=NULL)
{
theBoard->_values = temp_values;
} else
{
reportError(MEM_OUT);
return FALSE;
}

int i = 0;
for (i=0; i<theBoard->_size_r; i++)
{
char* temp_values_c = NULL;
HERE( line 226)-> temp_values_c = realloc(theBoard->_values[i], theBoard->_size_c*sizeof(char) );

if(temp_values_c != NULL)
{
theBoard->_values[i] = temp_values_c;
} else
{
reportError(MEM_OUT);
return FALSE;
}
}

// initialize extra memory
if(row_out_bound)
{
init(theBoard,prev_size_r,0);
}

if(col_out_bound)
{
init(theBoard,0, prev_size_c);
}

}

为什么会发生这种情况,我该如何解决?

最佳答案

问题是 theBoard->_values[i] 没有初始化,因为它直接来自 realloc (temp_values = ...) .

编辑

Can you elaborate please?

我以为你永远不会问。 realloc 函数返回指定大小的内存块,对其内容不做任何保证。因此,出于所有实际目的,您应该假设 realloc 返回的任何内容都包含垃圾。在您的代码中,您获取了(潜在的)垃圾并在 226 行上告诉 realloc:

这是一个完全有效的指针。它是 NULL 或者我之前从 malloc 获得它。你能把它重新分配到这个大小吗?那不是真的! theBoard->_values[i] 包含的实际值可以是任何值。

您想要的是执行 theBoard->_values[i] = NULL 的循环,或者可能使用 malloc 而不是 realloc第 226 行。

关于c: valgrind "Conditional jump or move depends on uninitialised value(s)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709419/

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