Замена realloc (C -> C ++)

В более раннем вопросе я спрашивал об указателях приведения типов, но был направлен на лучшее решение - использовать систему распределения C ++ вместо mallocs. (Я конвертирую код C в 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:

Хорошо, я пришел к единому мнению, что мне следует отказаться от своего текущего решения (что я готов сделать).

Просто чтобы сделать уверен, что я правильно понимаю, вы, ребята, имеете в виду это, вместо массива указателей на объекты у меня должен быть просто вектор, содержащий сами объекты?

11
задан Biosci3c 6 October 2010 в 03:04
поделиться