oka*_*ami 3 c++ arrays pointers initialization char
我怀疑在C++中初始化这个:
char** A_Function()
{
char** charList = new char*[2];
charList[0] = "abcde";
charList[1] = "fghij";
return charList;
}
Run Code Online (Sandbox Code Playgroud)
编译此代码时没有问题,但我不确定该行为.
1 - char列表:char*在堆上好吗?2 - charList [n_position]在堆或堆栈上?
我不明白char*[2]真正意味着什么,是不是意味着:它是一个静态数组,它的每个元素都有一个指向char的指针?
如果它是静态的,那么这个数组将在堆栈上分配,所以这个数组是一个巨大的bug制造者?
如果我是对的,如何在堆上分配它?
也许一张照片会有所帮助:

当你从中返回时A_Function,charList 被摧毁,但其他两个保持完整.因为你charList从A_Function那里返回的值没有问题 - 你只需要在不同的变量中保存相同的值,至少假设你实际使用了返回值A_Function(即,将其分配给某些东西).
如果你没有保留这个值,你就会有内存泄漏 - 你将不再拥有指向你在免费商店中分配的两个指针数组的指针,因此你将无法释放它们.
2个char *类型的指针数组在动态内存(堆)中分配.数组的每个元素都设置为指向存储在静态内存中的字符串(到字符串文字).静态内存既不是堆也不是堆栈.只要程序运行,静态存储器中的对象就会存在.所以,正式地说,代码中没有问题.
但是,使用char *指针指向字符串文字并不是一个好主意.字符串文字是不可修改的,因此const char *在这种情况下指针会更合适.