【发布时间】:2025-12-01 14:25:01
【问题描述】:
我有这个功能:
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;
}
它基本上检查一个节点是否已经存在于我的数组中(已知),如果不存在,则将其添加到我的数组中,如果存在,则返回现有节点。我对 realloc 有这种奇怪的行为,在我调用函数的一些迭代之后,realloc 丢失了我的数组的第一个元素,将其值设置为 NULL (0x0)。我通过使用 gdb 运行代码并添加到已知的监视列表 [0] 来检查这一点。 我使用这个 main 对其进行了测试:
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);
}
}
【问题讨论】:
标签: c return-value dynamic-memory-allocation realloc