2013-05-13 54 views
1

我遇到了已分配但尚未初始化的問題。已分配但未初始化

這裏是代碼的一部分:

void test2(vector<string> names, int num) // just for test 
{ 
    const char **tmp = new const char *[num]; // issue happends here. 
    for(int i = 0; i < num; i ++) 
     tmp[i] = names[i].c_str(); // is it not inialization??? 
    //call another function using tmp 
    delete []tmp; 
} 

以及在代碼的第3行,我有個問題:分配:「TMP」 =「新字符常量* [NUM]」,這是分配但未初始化。

我相信我對2-d數組的分配和初始化感到困惑。我認爲tmp是const char *數組,我只是想將vertor轉換爲const char **;

然後在代碼中,在這裏使用新的和刪除是否正確?我知道,如果二維數組是int * ,那麼如果我想給它賦值,我需要新的int [num],然後做一個for循環到新的int [];但我的情況如何呢?

有人可以幫我用這段代碼嗎?

+1

常數是恆定的。 – 2013-05-13 19:10:32

+3

你有什麼問題?編譯器是否抱怨?如果是這樣,請發佈消息。代碼沒有做到你期望的那樣做?展示你如何運用代碼,描述你期望它做什麼,以及它實際上在做什麼。 – 2013-05-13 19:13:33

+1

我懷疑問題中的代碼與您遇到的代碼不一樣。 – 2013-05-13 19:17:40

回答

1

不要在這種情況下使用const,因爲您正在分配數據後初始化。

+0

我想我最好使用vector ; – user1672690 2013-05-13 20:57:03

+0

const char ** tmp = new const char * [num]; 這裏只是一個分配,並且只要您分配內存,您就必須初始化。 並且在for循環中,它不是初始化,而是賦值。 所以在這種情況下,我們最好使用vector 而不是const char ** – user1672690 2013-05-13 22:09:46