在早先的問題,我問類型轉換指針,但被引導到使用C++分配系統代替mallocs的更好的解決方案。 (我把一些C代碼C++)更換的realloc(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:
好吧,我得到的共識是,我要拋棄我目前的解決方案(這我公開這樣做)。
只是爲了確保我的理解正確,你們是否意味着,而不是一個指向對象的指針數組,我應該只有一個包含對象本身的向量?
那麼忽略)不正確地在上述片的代碼的事實,你正在使用的realloc(。這是C++造成的一個弱點,因爲對象具有構造函數/析構函數。該問題通過使用矢量而不是原始數組來解決。 – 2010-10-06 03:02:12