En una pregunta anterior, pregunté acerca de los punteros de conversión de tipos, pero se me remitió a la mejor solución de utilizar el sistema de asignación C++ en lugar de mallocs. (Estoy convirtiendo algo de código C a C++)Reemplazo de realloc (C -> C++)
Sin embargo, todavía tengo un problema con una función similar:
me cambió:
tmp = malloc(sizeof(char*) * mtmp); --> tmp = new char*[mtmp];
y
free(tmp) --> delete [] tmp;
Sin embargo, ¿Qué debo hacer con realloc en la siguiente función:
char* space_getRndPlanet (void)
{
int i,j;
char **tmp;
int ntmp;
int mtmp;
char *res;
ntmp = 0;
mtmp = CHUNK_SIZE;
//tmp = malloc(sizeof(char*) * mtmp); <-- replaced with line below
tmp = new char*[mtmp];
for (i=0; i<systems_nstack; i++)
for (j=0; j<systems_stack[i].nplanets; j++) {
if(systems_stack[i].planets[j]->real == ASSET_REAL) {
ntmp++;
if (ntmp > mtmp) { /* need more space */
mtmp += CHUNK_SIZE;
tmp = realloc(tmp, sizeof(char*) * mtmp); <--- Realloc
}
tmp[ntmp-1] = systems_stack[i].planets[j]->name;
estoy consiguiendo el error siguiente:
error: invalid conversion from 'void*' to 'char**'|
EDIT 2:
acuerdo, el consenso que estoy recibiendo es que debo abandonar mi solución actual (que estoy abierto a hacer).
Solo para asegurarme de que estoy entendiendo correctamente, ¿quieren decirme que, en lugar de una serie de punteros a los objetos, debería tener un vector que contenga los objetos mismos?
Ignorando bien el hecho de que está utilizando realloc() incorrectamente en el fragmento de código anterior. Esta es una debilidad de C++ causada porque los objetos tienen constructores/destructores. El problema se resuelve mediante el uso de vectores en lugar de matrices en bruto. –