我怀疑在C++中对此进行初始化:
char** A_Function()
{
char** charList = new char*[2];
charList[0] = "abcde";
charList[1] = "fghij";
return charList;
}
“在编译此代码上”没有问题,但是我不确定行为。
1-字符列表:char *在堆上可以吗?
2-charList [n_position]是在堆还是堆栈上?
我不明白char * [2]的真正含义是什么:
它是一个静态数组,在每个元素上都有一个指向char的指针?
如果它是静态的,那么这个数组将被分配在堆栈上,那么这个数组是一个巨大的bug制造者吗?
如果我是对的,如何在堆上分配它?
最佳答案
也许图片会有所帮助:
当您从A_Function
返回时,charList
被销毁,但其他两个保持不变。因为您要从charList
返回A_Function
的值,所以没有问题-您将把相同的值保存在不同的变量中,至少假设您实际使用了A_Function
的返回值(即,将其分配给某个对象) )。
如果不保留该值,则会发生内存泄漏-您将再也没有指向在免费存储区中分配的两个指针的数组的指针,因此将无法释放它们。