c++ - 指针的指针c++ char初始化

标签 c++ arrays pointers initialization char

我怀疑在 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 的指针?

如果它是静态的,这个数组将在堆栈上分配,所以这个数组是一个巨大的错误制造者?

如果我是对的,如何在堆上分配它?

最佳答案

也许图片会有所帮助:

alt text

当您从 A_Function 返回时,charList 被销毁,但其他两个保持不变。由于您要从 A_Function 返回 charList 的值,所以没有问题——您只需将相同的值保存在不同的变量中,至少假设您实际上使用 A_Function 的返回值(即,将其分配给某物)。

如果您不保留该值,就会发生内存泄漏——您将不再有一个指针指向您在空闲存储上分配的两个指针的数组,因此您将无法释放它们.

关于c++ - 指针的指针c++ char初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681905/

相关文章:

c - 为什么某些 C 字符串库函数(即 strtok)不接受尚未使用 malloc 分配的 char *?

c# - C++ MFC 与 .NET?

c++ - 使用 std::function 作为具有任意数量参数的数据成员

javascript - 快速的 JavaScript 数组操作

c - 为什么将指向字符串的指针传递给函数时是 2 星

c++ - QWidget::repaint:使用指针检测到递归重绘

c++ - 如果winsock2套接字是非阻塞的,与其关联的SSL对象是否也会表现出非阻塞行为?

java - 如何用其他语言编写带有绑定(bind)的Qt插件系统?

arrays - 将文件中的行复制到 char *array[]?

ios - 将元素紧密分组