В более раннем вопросе я спросил о указателях приведения типов, но был направлен на лучшее решение использования системы распределения С++ вместо mallocs. (Я конвертирую некоторый код C в С++)
Однако у меня все еще есть проблема с аналогичной функцией:
Я изменил:
tmp = malloc(sizeof(char*) * mtmp); --> tmp = new char*[mtmp];
и
free(tmp) --> delete [] tmp;
Однако, что мне делать с realloc в следующей функции:
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;
Я получаю следующую ошибку:
error: invalid conversion from 'void*' to 'char**'|
ИЗМЕНИТЬ 2:
Хорошо, консенсус, который я получаю, заключается в том, что я должен отказаться от своего текущего решения (которое я открываю для себя).
Чтобы убедиться, что я правильно понимаю, вы, ребята, понимаете, что вместо массива указателей на объекты я должен просто иметь вектор, содержащий сами объекты?