2013-05-13 72 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