gpt4 book ai didi

c++ - 在函数内部创建全局动态数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:49 24 4
gpt4 key购买 nike

我正在用 C++ 编写程序。在我的程序中,我需要在一个函数内创建一个具有动态大小的数组,但其他函数也应该可以访问该数组。我不会在这里发布我的代码,只写一个虚拟示例。

char *array;


void function_1() {
array = new char(3);
array[0] = "value 1";
array[1] = "value 2";
array[2] = "value 3";
}

void function_2() {
array[0] = "new value 1";
}

int main() {
function_1();
function_2();

delete[] array;
}

我的问题是:我不确定数组是否会存在于 function_1 之外,也就是它被初始化的地方,直到我释放数组的内存。或者数组将只有一个函数内的局部变量行为。这意味着,存储数组值的内存将在函数完成后分配,并且我的数组的内存地址可以在我的程序中用其他东西重写。

谢谢。

最佳答案

首先,它当然会存在于外部,这就是动态分配的全部内容。此外,变量本身是全局的。此外,它应该是 char const** array;并且分配应该是new char const*[3] (注意方括号)。 const因为您不会在此处更改字符串的内容。

其次,不要那样做。只需将它放在一个类中并使用 std::vector !

#include <vector>

class Foo{
public:
function_1(){
_array.push_back("value 1");
_array.push_back("value 2");
_array.push_back("value 3");
}

function_2(){
_array[0] = ("new value 1");
}

private:
std::vector<std::string> _array;
};

int main(){
Foo f;
f.function_1();
f.function_2();
}

更好的是,有一个 std::vector<std::string> ,因此您可以安全地修改内容,而不必担心内存管理。虽然,这将不再是一个单独的 block 。现在我要问了,你到底想如何将缓冲区传递给套接字?

关于c++ - 在函数内部创建全局动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com