以前の質問で、ポインターの型キャストについて尋ねましたが、malloc の代わりに C++ 割り当てシステムを使用するというより良い解決策に向けられました。(一部の 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:
さて、私が得ているコンセンサスは、現在のソリューションを捨てる必要があるということです (私はそれを行うことにオープンです)。
私が正しく理解していることを確認するために、オブジェクトへのポインターの配列の代わりに、オブジェクト自体を含むベクトルが必要なのですか?