gpt4 book ai didi

c++ - 如何在两个不同的函数c++中访问动态数组

转载 作者:行者123 更新时间:2023-11-30 00:51:31 26 4
gpt4 key购买 nike

我需要在两个不同的函数中访问一个动态数组。对它所做的更改需要转移到另一个。

这些是函数:

void populate(int size, int *ptr)
{
ptr = new int[size];
for (int i = 0; i < size; i++)
{
ptr[i] = rand() % 51;
}
}

void display(int size, int *ptr)
{
for (int i=0; i < size; i++)
{
cout << ptr[i] << endl;
}
}

它主要被称为

int* ptr = NULL;

最佳答案

populate ,您正试图使传递给函数的指针指向动态分配的数组。但是您通过 传递指针。这对调用方没有影响,并导致内存泄漏。您需要通过引用传递指针:

void populate(int size, int*& ptr)
^

或者返回

int* populate(int size)
{
int* ptr = new int[size];
....
return ptr;
}

但最简单和最安全的做法是使用 std::vector<int>代替这两个功能。例如

std::vector<int> populate(size_t size)
{
std::vector<int> v(size);
for (auto& i : v)
{
i = rand() % 51;
}
return v;
}

void display(const std::vector<int>& v)
{
for (auto i : v)
{
std::cout << ptr[i] << std::endl;
}
}

这样一来,返回的内容就一目了然,调用者不必再去了解他们是否必须管理原始指针指向的资源。

请注意 populate可以通过调用 std::generate 来代替, 和 display调用 std::copy .

关于c++ - 如何在两个不同的函数c++中访问动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21596614/

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