当我打印出变量的值时,它是正确的,否则它不会改变。 C语言

时间:2014-07-15 10:07:04

标签: python c

我定义了一个初始值为-1的变量m_index。我在第一个for循环中增加了这个变量,然后在第二个for循环中使用增加的值。

问题是当我将print命令放在第一个循环结束时,m_index的值是正确的但是当我对print命令发表评论时,m_index的值仍为-1。< / p>

我将不胜感激任何帮助。代码是用C语言编写的,使用python API,我的平台是linux ubuntu 64bit。

static PyObject *get_outside_members(PyArrayObject *AA, PyArrayObject *bb, npy_int AA_index)
{
    npy_intp m_index=-1, fp_index=-1, o_index=0, i=0;  
    npy_double distance=0.0, max_distance=0;
    PyArrayObject *tmembers, *tfurthest_points;
    npy_intp dims[1];
    PyObject *r;
    //---------------------------------------------------------
    dims[0]=outs_N;
    tmembers=(PyArrayObject *)PyArray_SimpleNew(1,dims,NPY_INT);
    if(tmembers==NULL)
    {
        PyErr_SetString(PyExc_ValueError,"Could not create tmembers array");
        return NULL;
    }
    distances=(PyArrayObject *)PyArray_SimpleNew(1,dims,NPY_DOUBLE);
    if(distances==NULL)
    {
        PyErr_SetString(PyExc_ValueError,"Could not create distances array");
        return NULL;
    }
    tfurthest_points=(PyArrayObject *)PyArray_SimpleNew(1,dims,NPY_INT);
    if(tfurthest_points==NULL)
    {
        PyErr_SetString(PyExc_ValueError,"Could not create tfurthest_points array");
        return NULL;
    }
    dims[0]=1;
    furthest_dist=(PyArrayObject *)PyArray_SimpleNew(1,dims,NPY_DOUBLE);
    if(furthest_dist==NULL)
    {
        PyErr_SetString(PyExc_ValueError,"Could not create furthest_dist array");
        return NULL;
    }
    //---------------------------------------------------------  
    for(i=0;i<outs_N;i++)
    {
        o_index=outsides(i);    
        distance = distpalne(AA,bb,AA_index,o_index);
        if(i == 0)
            max_distance = distance;
        else if(distance > max_distance)
           max_distance = distance;
        if(distance >= 0)
        {
            m_index++;                
            tmembers(m_index)=o_index;
            distances(m_index)=distance;       
        }
    }
    //printf("m_index=%d\n",m_index);  
    for(i=0;i<=m_index;i++)
    {
        if(distances(i) == max_distance)
        {
            fp_index++;      
            tfurthest_points(fp_index)=tmembers(i);      
        }
    }
    PyArray_Return(tmembers);
}

1 个答案:

答案 0 :(得分:-1)

我非常确定这与printf没有任何关系。 printf按值获取变量值,因此无法更改任何内容。如果我是你,经过一段时间后我会再次检查。

此外,在使用print语句进行调试时,请始终在每个fflush(stdout);语句后添加print,以确保立即打印该值。作为替代方案,您可以打印到stderr自动刷新:

fprintf(stderr, "prints directly");

我要检查的另一件事是,你没有任何内存错误。您可以使用Valgrind