我定义了一个初始值为-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);
}
答案 0 :(得分:-1)
我非常确定这与printf
没有任何关系。 printf
按值获取变量值,因此无法更改任何内容。如果我是你,经过一段时间后我会再次检查。
此外,在使用print
语句进行调试时,请始终在每个fflush(stdout);
语句后添加print
,以确保立即打印该值。作为替代方案,您可以打印到stderr
自动刷新:
fprintf(stderr, "prints directly");
我要检查的另一件事是,你没有任何内存错误。您可以使用Valgrind。