In una domanda precedente, ho chiesto informazioni sui puntatori di typecasting, ma è stato indirizzato alla soluzione migliore di utilizzare il sistema di allocazione C++ anziché mallocs. (I sono la conversione del codice C al C++)Sostituzione di realloc (C -> C++)
Tuttavia, ho ancora un problema con una funzione simile:
ho cambiato:
tmp = malloc(sizeof(char*) * mtmp); --> tmp = new char*[mtmp];
e
free(tmp) --> delete [] tmp;
Tuttavia, cosa devo fare con realloc nella seguente funzione:
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;
Sto ottenendo il seguente errore:
error: invalid conversion from 'void*' to 'char**'|
EDIT 2:
D'accordo, il consenso sto ottenendo è che dovrei abbandonare la mia soluzione attuale (che io sono aperto a fare).
Giusto per essere sicuro di comprendere correttamente, voi ragazzi intendete che, invece di una serie di puntatori agli oggetti, dovrei semplicemente avere un vettore contenente gli oggetti stessi?
Ben ignorando il fatto che si sta utilizzando realloc() in modo non corretto nella parte di codice precedente. Questo è un punto debole del C++ causato dal fatto che gli oggetti hanno costruttori/distruttori. Il problema viene risolto utilizzando il vettore piuttosto che gli array raw. –