gpt4 book ai didi

c++ - 什么时候删除 karatsuba 算法中分配的内存?

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


这是我对 karatsuba 算法的实现,它在删除部分被注释时运行良好,但是当我将其插入代码时,它会导致输出错误!
(例如对于测试 n=5,a=b={1, 2, 3, 4, 5})

void conv(int a[], int b[], int c[], int n)
{
if (n == 1)
{
c[0] = a[0]*b[0];
return;
}
int *C0 = new int[n];
int *C1 = new int[n];
int *C2 = new int[n];
conv(a, b, C0, n/2);
conv(a + n/2, b + n/2, C1, n/2);
for (int i = 0; i < n/2; i++)
a[i] += a[i + n/2], b[i] += b[i + n/2];
conv(a, b, C2, n/2);
for (int i = 0; i < n/2; i++)
a[i] -= a[i + n/2], b[i] -= b[i + n/2];
for (int i = 0; i < n; i++)
{
c[i] += C0[i];
c[i + n] += C1[i];
c[i + n/2] += C2[i] - C1[i] - C0[i];
}
/* delete[] C0;
delete[] C1;
delete[] C2;*/
}

删除有什么问题?我是否以错误的方式释放了分配的内存?
提前致谢!

最佳答案

您可以将它们声明为 vector ,而不是将它们声明为指针,这样您就不必担心删除问题。删除的问题在于您的代码参数中您实际上是将 c 作为指针发送,因此当您删除指针时,您仍然指向您已删除的地址而不是值。

关于c++ - 什么时候删除 karatsuba 算法中分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31244659/

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