我怀疑在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的返回值(即,将其分配给某个对象) )。

如果不保留该值,则会发生内存泄漏-您将再也没有指向在免费存储区中分配的两个指针的数组的指针,因此将无法释放它们。

10-07 18:53