Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
去年关门了。
我需要在递归函数中传递一个重新分配此大小的双指针。这是函数:
这个函数没有重新分配好内存(进程很好,错误在递归调用中)。我试过这个功能,它运行得很好:
所以内存重新分配很好,问题是将双指针传递给递归函数。知道怎么通过吗?
问题是:如何将双指针传递给递归函数才能正常工作?第一个条目很好,递归条目没有,所以指针在递归中没有传递fine。
谢谢您。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
去年关门了。
我需要在递归函数中传递一个重新分配此大小的双指针。这是函数:
int main(){
PERSONA *tablaHash = (PERSONA *) malloc(1 * sizeof(PERSONA));
redimensionar(&tablaHash, regToInput, 1, "TypeA", 1);
return 0;
};
int redimensionar(PERSONA **tablaHash, PERSONA reg, int tam, int tipoPruebaColision, int n) {
if (n < 15) {
n *= 2;
*tablaHash = realloc( *tablaHash, (n*tam) * sizeof(PERSONA) );
return ( redimensionar(tablaHash, reg, n*tam, tipoPruebaColision, n) ); //HERE IS THE ERROR
}
else {
insertar(*tablaHash, reg, tam, tipoPruebaColision);
return (tam);
}
}
这个函数没有重新分配好内存(进程很好,错误在递归调用中)。我试过这个功能,它运行得很好:
int redimensionar(PERSONA **tablaHash, PERSONA reg, int tam, int tipoPruebaColision, int n) {
n *= 2;
*tablaHash = realloc( *tablaHash, (n*tam) * sizeof(PERSONA) );
insertar(*tablaHash, reg, tam, tipoPruebaColision);
}
所以内存重新分配很好,问题是将双指针传递给递归函数。知道怎么通过吗?
问题是:如何将双指针传递给递归函数才能正常工作?第一个条目很好,递归条目没有,所以指针在递归中没有传递fine。
谢谢您。
最佳答案
经过8次迭代,tam
变得如此之大,以至于溢出并变成0
:
一。n=2,tam=1
2。n=4,tam=2
三。n=8,tam=8
四。n=16,tam=64
5个。n=32,tam=1024
6。n=64,tam=32768
7号。n=128,tam=2097152
8个。n=256,tam=268435456
9号。n=512,tam=0
因此,您尝试分配0
字节,realloc
返回空值。您应该始终检查malloc()/realloc()
是否返回空值。
10-05 21:24