Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c:valgrind“;条件跳转或移动取决于未初始化的值;_C_Valgrind - Fatal编程技术网

c:valgrind“;条件跳转或移动取决于未初始化的值;

c:valgrind“;条件跳转或移动取决于未初始化的值;,c,valgrind,C,Valgrind,我在valgrind遇到了一个错误,不知道出了什么问题。 错误是: valgrind输出: 它指出问题发生在第226行: if(reallocate ==TRUE) { char** temp_values = NULL; temp_values = (char**) realloc(theBoard->_values, theBoard->_size_r*sizeof(char*) ); if(temp_values!=NULL) {

我在valgrind遇到了一个错误,不知道出了什么问题。 错误是: valgrind输出:

它指出问题发生在第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);
    }

}
if(重新分配==TRUE)
{
字符**临时值=空;
临时值=(字符**)realloc(电路板->\u值,电路板->\u大小*sizeof(字符*);
如果(临时值!=NULL)
{
电路板->温度值=温度值;
}否则
{
报告错误(MEM_OUT);
返回FALSE;
}
int i=0;
对于(i=0;i\u size\u r;i++)
{
char*temp_值_c=NULL;
这里(第226行)->temp_values_c=realloc(电路板->_values[i],电路板->_size_c*sizeof(char));
如果(临时值=NULL)
{
电路板->\u值[i]=温度值\u c;
}否则
{
报告错误(MEM_OUT);
返回FALSE;
}
}
//初始化额外内存
如果(行外)
{
初始值(板,上一个尺寸,0);
}
如果(列外界)
{
初始(板,0,上一个尺寸c);
}
}

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

问题是
电路板->\u值[i]
没有初始化,因为它直接来自
realloc
temp\u值=…

编辑 你能详细说明一下吗

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

这是一个完全有效的指针。它是
NULL
或者我以前从
malloc
获得的。你能把它改成这个尺寸吗?那不是真的!
theBoard->\u values[i]
包含的实际值可以是任何值


你想要的是一个循环,它执行
theBoard->\u values[i]=NULL
,或者可能使用
malloc
而不是第226行的
realloc

问题是
theBoard->\u values[i]
没有初始化,因为它直接来自
realloc
temp\u values=…

编辑 你能详细说明一下吗

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

这是一个完全有效的指针。它是
NULL
或者我以前从
malloc
获得的。你能把它改成这个尺寸吗?那不是真的!
theBoard->\u values[i]
包含的实际值可以是任何值


您需要的是一个循环,它执行
theBoard->\u values[i]=NULL
,或者可以使用
malloc
而不是第226行上的
realloc

如果您使用--track origins=yes运行valgrind,它将告诉您冲突的变量以及它的分配位置。本周是否有valgrind更新?这是我在过去几天内遇到的第三个问题。如果使用--track origins=yes运行valgrind,它将告诉您冲突变量及其分配位置。本周是否有valgrind更新?这是我最近几天遇到的第三个问题,你能详细说明一下吗?我如何解决这个问题?我不能使用malloc,因为我想保留以前的值。我无法忍受你建议的第一个选项-在循环中做什么?@Tom嗯,在这种情况下,
realloc
是无用的,因为board->\u values[I]是垃圾。在循环中,你可以说
theBoard->\u values[i]=NULL
@Tom帮你修好了吗?你能详细说明一下吗?我如何解决这个问题?我不能使用malloc,因为我想保留以前的值。我无法忍受你建议的第一个选项-在循环中做什么?@Tom嗯,在这种情况下,
realloc
是无用的,因为board->\u values[I]是垃圾。在循环中,你可以说
theBoard->\u values[i]=NULL
@Tom帮你修好了吗?
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);
    }

}