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

标签 c++ algorithm memory-management dynamic-memory-allocation


这是我对 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/

相关文章:

java - 说明此伪代码计算的内容并确定其运行时间

根据项目索引将数组分成 N 组的算法(应该很简单)

performance - 从 AVL 树中获取中位数?

c++ - 构造许多嵌套的类成员

c++ - 为什么 C++ 代码必须包含在函数中?

C++ 2D 数组分配内存以避免段错误

c - 如何动态分配指针数组?

Java:将内存刷新到磁盘

c++ - 绘制 N 宽线?

c++ - 多重继承中的构造函数调用顺序