gpt4 book ai didi

c++ - 当调用函数发生异常时,如何确保数组在函数内部被删除?

转载 作者:太空宇宙 更新时间:2023-11-04 15:29:50 25 4
gpt4 key购买 nike

在下面的例子中,当第二个数组分配失败时,如何确保第一个数组被删除? (出于演示目的,故意错误“-3”导致抛出异常)。

#include <iostream>

using namespace std;

void func(int n1, int n2)
{
int *array1 = new int[n1];
cout << "alloc 1" << endl;
int *array2 = new int[n2];
cout << "alloc 2" << endl;
// Something useful with these arrays goes here!
delete[] array1;
cout << "deleted 1" << endl;
delete[] array2;
cout << "deleted 2" << endl;
}

int main(int argc, char *argv[])
{
try
{
func(10, -3);
}
catch(bad_alloc ex)
{
cout << "bad alloc" << endl;
}
return 0;
}

或者“array1”是否被自动删除?

更新

我不能使用“std::vector”,因为我正在调用遗留函数,以及我自己的都使用数组的函数。

一个凌乱但实用的解决方案:

void func(int n1, int n2)
{
int *array1;
int *array2;
int v = 0;
try
{
array1 = new int[n1];
cout << "alloc 1" << endl;
v = 1;
array2 = new int[n2];
cout << "alloc 2" << endl;
// Something useful with these arrays goes here!
}
catch(bad_alloc ex)
{
cout << "bad alloc func" << endl;
if (v == 1)
{
delete[] array1;
cout << "deleted 1" << endl;
}
throw;
}
delete[] array1;
delete[] array2;
}

int main(int argc, char *argv[])
{
try
{
func(10, -3);
}
catch(bad_alloc ex)
{
cout << "bad alloc main" << endl;
}
return 0;
}

最佳答案

使用 std::vector .它会自动释放内存资源。

您可以使用 data() 访问底层指针成员函数,因此您可以将数据传递给遗留函数。

关于c++ - 当调用函数发生异常时,如何确保数组在函数内部被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444988/

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