我想传递一个指向函数的指针,该函数将调用将使用realloc的第二个函数。 问题是realloc返回NULL。
我不知道错误是在函数调用中的*数字还是别的。
你能帮我吗?
代码:
int main(){
// some code.
clause_t* ptr; //clause_t is a structure i declared.
//Some work including the initial allocation of ptr (which is working).
assignLonely(matSAT, ic.nbClause, ic.nbVar, ptr); //the issue is here.
//Some other work
}
void assignLonely(int** matSAT, int nbClause, int nbVar, clause_t* ptr)
{
int i = 0, j = 0;
int cpt = 0;
int indice = -1;
for (i = 0; i < nbClause ; ++i)
{
j = 0;
cpt = 0;
while((j < nbVar) && (cpt < 2))
{
if (matSAT[i][j] != 0)
{
cpt++;
}
else
{
indice = j;
}
if (cpt < 2)
{
deleteClause(indice, &ptr);
}
j++;
}
}
}
void deleteClause(int indiceClause, clause_t** ptr)
{
int i = indiceClause;
int nbElt = sizeof((*ptr))/sizeof((*ptr)[0]);
int tailleElt = sizeof((*ptr)[0]);
while(i+1 < nbElt)
{
(*ptr)[i] = (*ptr)[i+1];
i++;
}
*ptr = (clause_t*)realloc(*ptr, (nbElt-1)*tailleElt);
if (*ptr == NULL)
{
fprintf(stderr, "Erreur reallocation\n");
exit(EXIT_FAILURE);
}
}
答案 0 :(得分:2)
您必须声明函数assignLonely
,类似于函数deleteClause
,如
void assignLonely(int** matSAT, int nbClause, int nbVar, clause_t** ptr);
如果您希望函数中ptr的更改将存储在main中的原始对象中。
还要考虑到这个陈述
int nbElt = sizeof((*ptr))/sizeof((*ptr)[0]);
错了。
表达式sizeof((*ptr))
将返回指针的大小。指针不保存有关它们指向的数组中有多少元素的信息。
所以表达
(nbElt-1)
可以等于零甚至是负数。