realloc() 删除第一个元素
realloc() deletes first element
我有这个功能:
node* creaNodo(coordinata pos, node** known, int* nKnown){
node* nodo = exists(known, pos, *nKnown);
if(nodo == NULL){
(*nKnown)++;
realloc(known, (*nKnown) * sizeof(node*));
nodo = malloc(sizeof(node) * 1);
nodo->nNextNodes = 0;
nodo->nextNodes = NULL;
nodo->nPreviousNodes = 0;
nodo->previousNodes = NULL;
nodo->posizione = pos;
known[*nKnown - 1] = nodo;
}
return nodo;
}
它主要检查我的数组中是否已经存在一个节点(已知),如果不存在,则将其添加到我的数组中,或者,如果存在,则 return 现有节点。我对 realloc 有这种奇怪的行为,在我调用函数的一些迭代之后,realloc 丢失了我的数组的第一个元素,将其值设置为 NULL (0x0)。我通过 运行 使用 gdb 的代码检查了这一点,并添加到我的观察列表 known[0]。
我用这个主要测试了它:
int main(){
node** known = malloc(sizeof(node*) * 1);
int nKnown = 0;
for(int i = 0; i < 20; i++){
coordinata* tmp = assegnaCoordinata(i,i);
creaNodo(*tmp, known, &nKnown);
}
}
调用realloc的return值没有存储在任何变量中
realloc(known, (*nKnown) * sizeof(node*));
因此,如果您尝试通过存储在变量 known
中的地址访问内存,这样的调用会调用未定义的行为。
至少你需要写
known = realloc(known, (*nKnown) * sizeof(node*));
虽然最好使用中间变量,因为函数可以 return 一个空指针,例如
node** tmp = realloc(known, (*nKnown) * sizeof(node*));
if ( tmp != NULL ) known = tmp;
//...
我有这个功能:
node* creaNodo(coordinata pos, node** known, int* nKnown){
node* nodo = exists(known, pos, *nKnown);
if(nodo == NULL){
(*nKnown)++;
realloc(known, (*nKnown) * sizeof(node*));
nodo = malloc(sizeof(node) * 1);
nodo->nNextNodes = 0;
nodo->nextNodes = NULL;
nodo->nPreviousNodes = 0;
nodo->previousNodes = NULL;
nodo->posizione = pos;
known[*nKnown - 1] = nodo;
}
return nodo;
}
它主要检查我的数组中是否已经存在一个节点(已知),如果不存在,则将其添加到我的数组中,或者,如果存在,则 return 现有节点。我对 realloc 有这种奇怪的行为,在我调用函数的一些迭代之后,realloc 丢失了我的数组的第一个元素,将其值设置为 NULL (0x0)。我通过 运行 使用 gdb 的代码检查了这一点,并添加到我的观察列表 known[0]。 我用这个主要测试了它:
int main(){
node** known = malloc(sizeof(node*) * 1);
int nKnown = 0;
for(int i = 0; i < 20; i++){
coordinata* tmp = assegnaCoordinata(i,i);
creaNodo(*tmp, known, &nKnown);
}
}
调用realloc的return值没有存储在任何变量中
realloc(known, (*nKnown) * sizeof(node*));
因此,如果您尝试通过存储在变量 known
中的地址访问内存,这样的调用会调用未定义的行为。
至少你需要写
known = realloc(known, (*nKnown) * sizeof(node*));
虽然最好使用中间变量,因为函数可以 return 一个空指针,例如
node** tmp = realloc(known, (*nKnown) * sizeof(node*));
if ( tmp != NULL ) known = tmp;
//...