在函数内创建全局动态数组

M.K*_*.K. 1 c++ memory arrays allocation dynamic

我正在用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;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我不确定,如果数组将存在于function_1之外,它初始化,直到我分配数组的内存.或者数组在一个函数中只有一个局部变量的行为.这意味着,存储数组值的内存将在函数完成后被解除定位,并且我的数组的内存地址可以在我的程序中稍后重新编译.

谢谢.

Xeo*_*Xeo 7

首先,当然它将存在于外部,这就是动态分配的全部内容.此外,变量本身是全局的.此外,它应该是a 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();
}
Run Code Online (Sandbox Code Playgroud)

更好的是,有一个std::vector<std::string>,所以你可以安全地修改内容而不必担心内存管理.虽然,对此不再是一个单独的块.现在我想问一下,你究竟想把缓冲区传递给套接字?