【发布时间】:2015-02-20 00:01:38
【问题描述】:
我想传递一个指向函数的指针,该函数将调用第二个使用 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);
}
}
【问题讨论】:
-
int nbElt = sizeof((*ptr))/sizeof((*ptr)[0]);这并不像你想象的那样。*ptr只是另一个指针,而不是数组。所以这将是 1 或 0,具体取决于 sizeof 子句_t。而且您的 realloc 将是零字节,这就是它返回 null 的原因。一个调试器或一些 printfs(例如nElt)会向您展示这一点,并且在询问之前也是一个好主意 -
请选择语言标签 - C 和 C++ 不同。 (大概去掉C++标签)
-
您需要
#include <stdlib.h>以确保realloc正常运行
标签: c++ c pointers malloc realloc